gpt4 book ai didi

lucene - Lucene 6.0 中的 TermQuery 和 QueryParser 有什么区别?

转载 作者:行者123 更新时间:2023-12-02 07:55:17 26 4
gpt4 key购买 nike

有两个查询,一个是由 QueryParser 创建的:

QueryParser parser = new QueryParser(field, analyzer);
Query query1 = parser.parse("Lucene");

另一个是term查询:

Query query2=new TermQuery(new Term("title", "Lucene"));

查询1和查询2有什么区别?

最佳答案

这是 lucene 文档中术语的定义。

A Term represents a word from text. This is the unit of search. It is composed of two elements, the text of the word, as a string, and the name of the field that the text occurred in.

因此,在您的情况下,将创建查询以在“标题”字段中搜索单词“Lucene”。

为了解释两者之间的区别,让我举一个不同的例子,

考虑以下因素

Query query2 = new TermQuery(new Term("title", "Apache Lucene"));

在这种情况下,查询将在字段标题中搜索确切的单词“Apache Lucene”。

在另一种情况下 举个例子,我们假设 Lucene 索引包含两个字段:“title”和“body”。

QueryParser parser = new QueryParser("title", "StandardAnalyzer");
Query query1 = parser.parse("title:Apache body:Lucene");
Query query2 = parser.parse("title:Apache Lucene");
Query query3 = parser.parse("title:\"Apache Lucene\"");

有几件事。

  1. “title”是 QueryParser 将搜索的字段,如果您不使用字段作为前缀的话。(如构造函数中给出的)。
  2. parser.parse("title:Apache body:Lucene"); -> 在这种情况下,最终查询将如下所示。查询2 = 标题:Apache 正文:Lucene.
  3. parser.parse("body:Apache Lucene"); -> 在这种情况下,最终查询也将如下所示。查询2 = 正文:Apache 标题:Lucene.但出于不同的原因。

    因此解析器将在正文字段中搜索“Apache”,在标题字段中搜索“Lucene”。 由于该字段仅对其直接前面的术语有效,( http://lucene.apache.org/core/2_9_4/queryparsersyntax.html )

    因此,由于我们没有为 lucene 指定任何字段,因此将使用默认字段“title”。

  4. query2 = parser.parse("title:\"Apache Lucene\""); 在这种情况下,我们明确告诉我们要在字段中搜索“Apache Lucene” “标题”。这是短语查询,如果分析正确的话,它与术语查询类似。

所以总结一下术语查询不会分析术语并按原样搜索。而查询解析器则根据上述的一些条件来解析输入。

关于lucene - Lucene 6.0 中的 TermQuery 和 QueryParser 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40467591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com