Hello stackOverflowers
我在Solr文档集合中有一个字段,其中包含一个名为的字段 names_txt - 这是一个multiValue =“true”字段。
此字段包含文档关联人员的所有姓名
我希望能够进行模糊搜索,同时限制匹配条款之间的术语数量。
查询
names_txt:("markus foss"~2)
将返回您找到 markus 和 foss 这些术语的所有文件,其中最多2个术语。
但是当我以模糊方式搜索并且还要指定匹配项之间的最大术语数时,我无法正确理解语法。
查询:
names_txt:(markus~0.7 foss~0.7)
这确实有效,但会返回错误的postives,因为它会在一个值中返回带有“markus something”的文档,而在另一个值中返回“foss somethingElse”。
我想写的是:
(markus~0.7 foss~0.7)~2
那里的任何人都有解决我问题的方法吗?
答案 0 :(得分:0)
我认为你可以使用SpanQuery来做到这一点。问题是Solr中的常见查询解析器不支持它们。看看那些支持跨度的this article:Surround,Xml-Query-Parser和Qsol。但请检查当前solr版本中每个的状态。
答案 1 :(得分:0)
因为在单个查询中,Solr可以处理单词距离约束或模糊搜索约束,我们需要两个术语:
names_txt:("markus foss"~2) AND names_txt:(markus~0.7 foss~0.7)
请注意,不推荐使用浮点数量化模糊度。在内部,lucene转换器将float
数字转换为0到2之间的int
,因此我们应该在搜索条件中从头开始使用此整数(Damereau Levenshtein)编辑距离。所以我的最终提案指出:
names_txt:("markus foss"~2) AND names_txt:(markus~1 foss~1)
(对于那些感兴趣的人:可以在this code file的末尾找到将相似性float
转换为编辑距离int
的已弃用,有点古怪的函数。)