Exemplo n.º 1
0
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
        }
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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