def search_whoosh(keywords: List[str] = []): start = time.time() result_list = [] error = False ix = open_dir(WHOOSH_INDEX_NAME) # 作成したインデックスファイルのディレクトリを指定 try: with ix.searcher() as searcher: if len(keywords) == 0: results = searcher.documents() result_list = [result for result in results] else: # QueryParserに"content"内を検索することを指定 words = "&".join(keywords) parser = QueryParser("content", ix.schema) parser.replace_plugin(operators_plugin) # opをセット query = parser.parse(words) # parserに検索語を入れる results = searcher.search(query, limit=None) # 検索語で全文検索 for result in results: data = {} data['title'] = result['title'] data['path'] = result['path'] if 'datetime' in result: data['datetime'] = result['datetime'] result_list.append(data) except Exception as e: error = str(e) print(f'Got an error: {error}') pass finally: measurement_time = str((time.time() - start) * 10000 // 10) + "ms" return { "time": measurement_time, "result": result_list, "error": error }
def search_in_index(self, text, dict_perf, dict_field, limit): if dict_field == 'nass': field = 'content' else: field = 'title' new_index = join(asm_path.INDEX_DIR_rw, 'my_index') ix = index.open_dir(new_index) qp = QueryParser(field, schema=ix.schema) op = OperatorsPlugin(And = r"&", Or = r"\|", AndNot = r"&!", AndMaybe = r"&~", Not = r'!') qp.replace_plugin(op) q = qp.parse(text) with ix.searcher() as s: r = s.search(q, limit=limit) return r
def __init__(self, index_dir, var_path): self._index = None try: self._index = wh_index.open_dir(index_dir) except wh_index.IndexError: raise IndexError self._var_reader = self._make_var_reader(var_path) op = OperatorsPlugin( And=r"\bAND\b|&", Or=None, # r"\bOR\b|\|", Not=r"\bNOT\b|\s+-", AndMaybe=None, Require=None) parser = QueryParser('content', _schema, termclass=my_variations(self._var_reader)) parser.remove_plugin_class(RangePlugin) parser.remove_plugin_class(BoostPlugin) parser.remove_plugin_class(WildcardPlugin) parser.replace_plugin(op) self._parser = parser parser_wild = QueryParser('content', _schema, termclass=my_variations(self._var_reader)) parser_wild.remove_plugin_class(RangePlugin) parser_wild.remove_plugin_class(BoostPlugin) parser_wild.replace_plugin(op) self._parser_wild = parser_wild op_filter = OperatorsPlugin(And=r"\bAND\b", Or=r"\bOR\b", Not=None, AndMaybe=None, Require=None) asf_parser = QueryParser('asfilter', _schema) asf_parser.replace_plugin(op_filter) self._asf_parser = asf_parser
def __init__(self, index_dir, var_path): self._index = None try: self._index = wh_index.open_dir(index_dir) except wh_index.IndexError: raise IndexError self._var_reader = self._make_var_reader(var_path) op = OperatorsPlugin( And=r"\bAND\b|&", Or=None, # r"\bOR\b|\|", Not=r"\bNOT\b|\s+-", AndMaybe=None, Require=None, ) parser = QueryParser("content", _schema, termclass=my_variations(self._var_reader)) parser.remove_plugin_class(RangePlugin) parser.remove_plugin_class(BoostPlugin) parser.remove_plugin_class(WildcardPlugin) parser.replace_plugin(op) self._parser = parser parser_wild = QueryParser("content", _schema, termclass=my_variations(self._var_reader)) parser_wild.remove_plugin_class(RangePlugin) parser_wild.remove_plugin_class(BoostPlugin) parser_wild.replace_plugin(op) self._parser_wild = parser_wild op_filter = OperatorsPlugin(And=r"\bAND\b", Or=r"\bOR\b", Not=None, AndMaybe=None, Require=None) asf_parser = QueryParser("asfilter", _schema) asf_parser.replace_plugin(op_filter) self._asf_parser = asf_parser