【问题标题】:Phrasequery to make researches进行研究的短语查询
【发布时间】:2016-09-16 15:22:31
【问题描述】:

有没有在 python 中使用短语查询? 直到现在我都在使用解析器,但我想知道如何使用短语查询。

parser = QueryParser(Version.LUCENE_CURRENT, "contents",
                        analyzer)
parser.setDefaultOperator(QueryParser.Operator.AND)
query = parser.parse(command)
    scoreDocs = searcher.search(query, 10000).scoreDocs

【问题讨论】:

    标签: python lucene


    【解决方案1】:

    首先,您应该了解,当您删除 QueryParser 时,您会丢失分析器。 PhraseQuery 不会像 QueryParser 那样为您分析,因此您需要对短语进行标记和规范化以匹配索引时间分析。您最好还是坚持使用解析器。

    也就是说,手动构建 PhraseQuery 看起来像这样:

    query = PhraseQuery()
    query.add(Term("contents", "lorem"))
    query.add(Term("contents", "ipsum"))
    query.add(Term("contents", "sit"))
    query.add(Term("contents", "amet"))
    

    您可以使用setSlop 设置查询的斜率。

    您还可以指定每个术语的位置。例如,如果“sit”是我索引中的停用词,我可能会这样做:

    query = PhraseQuery()
    query.add(Term("contents", "lorem"), 0)
    query.add(Term("contents", "ipsum"), 1)
    query.add(Term("contents", "amet"), 3)
    

    【讨论】:

    • 但是如果我需要搜索4克,我需要每次都这样做吗?对不起,我是新手..
    • ngram 通常通过在同一位置重叠多个标记来工作。您应该能够在每个位置搜索一克,或者通过指定它们在同一位置搜索多个,如我的第二个代码示例中所示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 2015-12-20
    • 2017-06-21
    • 2021-07-03
    • 2017-03-13
    相关资源
    最近更新 更多