【问题标题】:Why does Lucene QueryParser needs an Analyzer为什么 Lucene QueryParser 需要 Analyzer
【发布时间】:2013-02-20 00:05:27
【问题描述】:

我是 Lucene 新手,正在尝试使用 QueryParser 将原始字符串解析为 Query

我在想,为什么QueryParser.Parse() 方法需要一个 Analyzer 参数?

如果分析与查询有关,那么在处理常规Query 对象时也应指定AnalyzerTermQueryBooleanQuery 等),如果不是,为什么是@ 987654328@需要吗?

【问题讨论】:

    标签: lucene analyzer query-parser


    【解决方案1】:

    在建立索引时,Lucene 将文本划分为原子单元(令牌)。在这个阶段可能会发生很多事情(例如小写、词干、删除停用词等)。最终结果是一个术语。

    然后,当您查询时,Lucene 将完全相同的算法应用于查询,因此它可以将术语与术语匹配。

    问:为什么TermQuery 不需要分析器?
    A:QueryParser 对象解析查询字符串并产生TermQuery(也可以产生其他类型的查询,例如PhraseQuery)。 TermQuery 已经包含与索引中形状相同的术语。如果您(作为程序员)完全确定自己在做什么,您可以自己创建一个TermQuery——但这假设您知道查询解析的确切顺序并且您知道索引中的术语是什么样的。

    问:为什么BooleanQuery 不需要分析器?
    答:BooleanQuery 只是使用运算符(AND/OR/MUST/SHOULD 等)连接其他查询。如果没有任何其他查询,它本身并没有真正的用处。

    这是一个非常简化的答案。我强烈推荐阅读Introduction to Information Retrieval 书;它包含编写 Lucene(和其他类似框架)所基于的理论。这本书可在线免费获得。

    【讨论】:

    • 谢谢,但它没有解释为什么只在解析要查询的字符串时才需要指定分析器,而不是在查询时总是需要。
    • 编辑了我的答案,如果不够清楚或遗漏任何内容,请告诉我。
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多