Searching Documents (Python)¶
Searching Documents (Python)¶
1ot = impact.gui.output_toolbox
2db = impact.active_database
3docSettings = db.settings.document_settings
4
5def SearchAndDescribeResults(search):
6 docs = search.execute()
7
8 if not docs.isNone():
9
10 ot.add("Search executed successfully")
11
12 ot.add("Document Count: " + str(docs.count))
13 ot.add("Using Paging: " + str(docs.using_paging))
14
15 if (docs.using_paging):
16
17 ot.add("Page Number: " + str(docs.page_number))
18 ot.add("Page Count: " + str(docs.page_count))
19 ot.add("Total Document Count: " + str(docs.total_count))
20
21 else:
22
23 ot.add("Search failed")
24
25if (not docSettings.supports_searching) or (not docSettings.supports_searching_file_size):
26
27 ot.add("Document searching or searching file size is not supported")
28
29else:
30
31 ot.add("Document searching is supported")
32
33 # This is the document search we are building expressed as an psuedo SQL where clause
34 # ipDocumentKnownColumn.dkcName like "ACME%" and (ipDocumentKnownColumn.dkcSize >= 1048576 or ipDocumentKnownColumn.dkcGroup in ("GroupA", "GroupB", "GroupC"))
35
36 ot.add("=== Searching using multiple criteria ===")
37 search = db.document_search
38 nameColumn = docSettings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcName)
39 sizeColumn = docSettings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcSize)
40 groupColumn = docSettings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcGroup)
41
42 # some columns may not exist so you should check them
43 nameCriterion = None
44 try:
45 nameCriterion = search.add(nameColumn)
46 except Exception as exc:
47 pass
48 impact.gui.output_toolbox.add(f"Failed to create object via search.add(): {exc}")
49
50 nameCriterion.criterion_operator = ipDocumentCriterionOperator.dcoLike
51 nameCriterion.string_search = ipDocumentStringSearch.dssBeginsWith
52 nameCriterion.values = "ACME"
53 sizeCriterion = None
54 try:
55 sizeCriterion = search.add(sizeColumn)
56 except Exception as exc:
57 pass
58 impact.gui.output_toolbox.add(f"Failed to create object via search.add(): {exc}")
59
60 sizeCriterion.criterion_operator = ipDocumentCriterionOperator.dcoGreaterThanOrEqual
61 sizeCriterion.values = 1048576 # 1 MB
62 sizeCriterion.operator = ipDocumentOperator.doAnd
63 sizeCriterion.brackets_before = 1
64
65 # the groups must exist
66 groups = docSettings.groups
67 groupA = None
68 try:
69 groupA = groups.item("GroupA")
70 except Exception as exc:
71 pass
72 impact.gui.output_toolbox.add(f"Failed to create object via groups.item(): {exc}")
73 groupB = None
74 try:
75 groupB = groups.item("GroupB")
76 except Exception as exc:
77 pass
78 impact.gui.output_toolbox.add(f"Failed to create object via groups.item(): {exc}")
79 groupC = None
80 try:
81 groupC = groups.item("GroupC")
82 except Exception as exc:
83 pass
84 impact.gui.output_toolbox.add(f"Failed to create object via groups.item(): {exc}")
85 groupCriterion = None
86 try:
87 groupCriterion = search.add(groupColumn)
88 except Exception as exc:
89 pass
90 impact.gui.output_toolbox.add(f"Failed to create object via search.add(): {exc}")
91
92 groupCriterion.criterion_operator = ipDocumentCriterionOperator.dcoIn
93 groupCriterion.values = Array(groupA.ID, groupB.ID, groupC.ID)
94 groupCriterion.operator = ipDocumentOperator.doOr
95 groupCriterion.brackets_after = 1
96
97 SearchAndDescribeResults(search)
98
99ot.clear()