在lucene中编制索引时我正在创建文档如下:
queryParser = new QueryParser(Version.LUCENE_36,
"name",
new StandardAnalyzer(Version.LUCENE_36));
query = queryParser.parse(searchQuery);
我正在尝试搜索名称字段。 这个名字有国家名单。
这是查询解析器:
https
当我将搜索文本传递为“in”时,我希望获得匹配的结果,如印度,印度尼西亚等... 但结果是空的。 它只是完全匹配。 当我通过印度整个单词时,我得到的反应是零结果。
使匹配结果不准确的可能解决方案是什么。 对于前甚至“dia”一词应该像印度等一样给予回应。
答案 0 :(得分:2)
这里有很多问题。我假设您使用StandardAnalyzer
编制索引。如果没有,请在评论中纠正我。
StandardAnalyzer
合并了StopFilter
英文单词列表。该列表肯定包含麦芽汁“in”。因此,当您仅查询“in”时,这将在它甚至到达索引之前被过滤掉。StandardTokenizer
不会在单词中分割。您可以使用通配符搜索(“in *”)来使用索引标记“india”进行匹配,但是这不会与“dia”一起使用,因为在查询开始时不允许使用通配符。如果您想摆脱这两个问题,可能需要使用NGramTokenizer
。它不作用于停用词并将所有给定单词的n-gram索引为标记。阅读更多信息here。