3

你好 stackOverflowers

我在 Solr 文档集合中有一个名为 names_txt 的字段 - 这是一个 multiValue="true" 字段。

此字段包含与文档相关联的所有人员的姓名

我希望能够进行模糊搜索,同时限制匹配项之间的项数。

查询

names_txt:("markus foss"~2)

将返回您找到术语markusfoss的所有文档,它们之间最多有 2 个术语。

但是,当我以模糊的方式搜索并且还想指定匹配项之间的最大术语数时,我无法获得正确的语法。

查询:

names_txt:(markus~0.7 foss~0.7)

这确实有效,但会返回错误的结果,因为它将返回一个文档,其中一个值为“markus something”,另一个值为“foss somethingElse”。

我想写的是:

(markus~0.7 foss~0.7)~2
  • 但是这种语法在 solr 中是非法的。

有没有人可以解决我的问题?

4

2 回答 2

1

由于在一个查询词中 Solr 可以处理词距离限制或模糊搜索限制,因此我们需要两个词条:

names_txt:("markus foss"~2) AND names_txt:(markus~0.7 foss~0.7)

请注意,不推荐使用浮点数来量化模糊性。在内部,lucene converts 将float数字转换为int0 到 2 之间的数字,因此我们应该在搜索词的开头使用这个整数 (Damereau Levenshtein) 编辑距离。所以我的最终提案指出:

names_txt:("markus foss"~2) AND names_txt:(markus~1 foss~1)

(对于那些感兴趣的人:可以在此代码文件float的末尾找到将相似度转换为编辑距离的已弃用的、有些古怪的函数。)int

于 2015-04-30T08:51:33.233 回答
0

我认为您可以使用SpanQuery做到这一点问题是 Solr 中的常用查询解析器不支持它们。查看这篇文章,其中提到了支持跨度的那些:Surround、Xml-Query-Parser 和 Qsol。但是检查当前 solr 版本中每个的状态。

于 2012-08-15T18:00:51.523 回答