【问题标题】:Lucene: queryparser vs phrasequery or termqueryLucene:查询解析器与短语查询或术语查询
【发布时间】:2017-06-12 06:02:59
【问题描述】:

不使用queryparser,使用phrasequery或termquery有什么好处?在我看来,您可以使用 queryparser 来替换其中的任何一个?

例如,如果我想搜索一个确切的短语,我可以这样做:

String searchString = "\"word1 word2\"";
QueryParser queryParser = new QueryParser(Version.LUCENE_46,"content", analyzer);
Query query = queryParser.parse(searchString);

或者如果我想搜索 2 个词,我可以这样做

String searchString = "word1* AND word2*";
QueryParser queryParser = new QueryParser(Version.LUCENE_46,"content", analyzer);
Query query = queryParser.parse(searchString);

目前,我只使用 queryparser,它对我有用,但这是使用 Lucene 的正确方法吗?

【问题讨论】:

  • QueryParser 很好,直到它不是。使用它并没有什么问题,但是有些类型的查询超出了 QueryParser 的能力。

标签: java search lucene full-text-search


【解决方案1】:

不使用QueryParser 的主要缺点如下(在使用 Solr/Elastic 时尤其如此):

当您创建 TermQuery 时,如下所示:

Query q = new TermQuery("text", "keyword")

问题在于您需要手动应用分析器/过滤器。假设用户键入KeyWord,那么如果您只是将它传递给TermQuery,如果在索引期间您使用小写字母,您将找不到任何东西。小写当然很简单,但是您是否想将代码中的所有内容都应用到词干提取/nramming 等,而不依赖于分析器/过滤器的现有功能?

【讨论】:

  • 所以你是说使用 QueryParser 更好,因为它更容易应用分析器/过滤器?
  • @help,是的。例如,您将如何应用词干提取?手动会根据条件进行一些调用吗?
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
相关资源
最近更新 更多