Lucene Search未显示预期输出

时间:2017-03-05 10:05:31

标签: java lucene

在lucene中编制索引时我正在创建文档如下:

 queryParser = new QueryParser(Version.LUCENE_36,
         "name",
         new StandardAnalyzer(Version.LUCENE_36));
 query = queryParser.parse(searchQuery);

我正在尝试搜索名称字段。 这个名字有国家名单。

这是查询解析器:

https

当我将搜索文本传递为“in”时,我希望获得匹配的结果,如印度,印度尼西亚等... 但结果是空的。 它只是完全匹配。 当我通过印度整个单词时,我得到的反应是零结果。

使匹配结果不准确的可能解决方案是什么。 对于前甚至“dia”一词应该像印度等一样给予回应。

1 个答案:

答案 0 :(得分:2)

这里有很多问题。我假设您使用StandardAnalyzer编制索引。如果没有,请在评论中纠正我。

  1. Lucene StandardAnalyzer合并了StopFilter英文单词列表。该列表肯定包含麦芽汁“in”。因此,当您仅查询“in”时,这将在它甚至到达索引之前被过滤掉。
  2. 术语“in”不在索引中,因为StandardTokenizer不会在单词中分割。您可以使用通配符搜索(“in *”)来使用索引标记“india”进行匹配,但是这不会与“dia”一起使用,因为在查询开始时不允许使用通配符。
  3. 如果您想摆脱这两个问题,可能需要使用NGramTokenizer。它不作用于停用词并将所有给定单词的n-gram索引为标记。阅读更多信息here