2 回答
TA贡献1808条经验 获得超4个赞
我在这个帖子链接中得到了我问题的答案,该 链接解释了TermQuery的工作方式
TermQuery照原样搜索整个String。当索引数据经常被标记化时,此行为将给您不正确的结果。
在发布的代码中,我正在将整个搜索字符串传递给TermQuery,例如
查询q = new TermQuery(new Term(“ ashish”,“我已存储”));
现在在上述情况下,Lucene会按原样查找“我已存储”,这是永远不会找到的,因为在索引中此字符串已被标记化。
相反,我尝试像查询q一样搜索q = new TermQuery(new Term(“ ashish”,“ stored”));
上面的查询给了我预期的结果。
谢谢,Ashish
TA贡献1862条经验 获得超7个赞
真正的问题是您的查询字符串在这里没有得到分析。因此,请使用与索引文档时所用的分析器相同的分析器,并尝试使用以下代码分析查询字符串然后进行搜索。
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("ashish", analyzer);
Query query = new TermQuery(new Term("ashish", "i am stored"));
query = parser.parse(query.toString());
ScoreDoc[] hits = searcher.search(query, 5).scoreDocs;
添加回答
举报