我有一个索引,其字段为“Affiliation”,一些示例值为:
依此类推......(底线是附属关系以多种方式编写,没有明显的一致性)
我使用“医学院,斯坦福大学,加利福尼亚州帕洛阿尔托”(使用QueryParser)查询联盟字段中的索引,以查找所有斯坦福相关文档,我得到了很多虚假+ ves,可能是因为医学院等的存在(注意:我不能使用短语查询,因为建立隶属关系的方式不同)
我尝试了以下内容:
通过将搜索短语与空格分开来使用SpanNearQuery(此处我没有结果!)
尝试通过用逗号分割来提升(使用^)并使用比初始短语更高的提升来提升诸如“Palo Alto CA”的最后部分。在这里,我仍然会得到很多假的。
有关如何处理此问题的任何建议?如果SpanNearQuery要走的路,那么为什么我得到0结果的任何想法?
答案 0 :(得分:1)
您使用OR搜索而不是AND吗?
您可以使用QueryParser.setDefaultOperator()
将默认运算符设置为AND。将默认运算符设置为AND应该消除所有误报。但是,如果您的索引值为"Stanford University School of Medicine, Palo Alto, CA ",
并且您正在搜索"Stanford University School of Medicine, Palo Alto, CA USA",
(请注意查询中的额外术语USA),您可能会面临漏报的风险。
如果您的查询的条款不会超过索引值,则可以解决您的问题。
答案 1 :(得分:0)
我是这样做的:
在停用词列表中添加了诸如“大学”,“学校”,“医学”,“学院”等常用术语。
对每个术语使用booleanquery,并将setMinimumNumberShouldMatch()用于查询字符串长度的75%。
最后,循环访问命中收集器并使用字符串比较算法,如Jaro-Winkler,Levenstein等,用于二级过滤器。 (这很慢但确保精确度)。
希望这有帮助。