solr - 为什么必须在长查询字符串中的每个数字之间添加 OR?

标签 solr lucene

通常,当您查询字符串时,Solr 会标记所有内容并毫无问题地找到文档中的所有单词匹配。然而,我遇到了一个有趣的问题,我花了几个小时才弄清楚。

例如,我有一个文档,其中包含一个名为“ids”的字段(fieldtype:text_ws),其中包含以下字符串。

23 128 150 250 384 582 583 586 587 589 641 713 745 761 1004 1040 1080 1512 1551 1626 1882 1891 1911 1912 1913 1947 2035 2120 2140 2141 2143 2176 2219 2430 3023 3041 4087 4221 4243 4737 4776 5126 5130 5194 5224 5225 5226 5555 5564 5565 5568 5611 6310 9984 12048 12143 12878 12929 12930 12931 12933 12935 14001 14048 14049 14051 14079 14080 14082 14083

现在,如果我使用以下内容查询该字段,它将仅匹配第一个数字。但是,如果我在每个之间添加“或”,那么它将匹配几乎所有它们,因为它应该。

23 128 150 250 384 582 583 586 587 589 641 713 745 761 1004 1040 1512 1551 1626 1703 1760 1882 1891 1911 1913 1947 2035 2120 2140 2141 2143 2176 2219 2430 3023 3041 4087 4221 4243 4737 4776 5126 5130 5194 5224 5225 5226 5555 5564 5565 5568 5611 6310 9984 12048 12143 12878 12929 12930 12931 12933 12935 14001 14048 14049 14051 14079 14080 14082 14083

这到底是怎么回事?

此外,如何防止 Solr 提高分数?如果我只想知道查询中匹配的项目的百分比怎么办?

text_ws定义

<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  </analyzer>
</fieldType>

最佳答案

如果您正在查询 -
例如q=ids:23 128,仅查询23的字段id,而查询128的schema.xml中提到的默认搜索字段(通常是文本)。
查询格式为 ids:23 text:128,因此只会查询第一个术语的 ids,其余的将在默认文本字段中查询。

您如何使用 OR 进行查询?如果 q=ids:(23 OR 128),它将匹配整个 ids 字段。

您可以使用debugQuery参数来检查Solr创建的查询。

关于solr - 为什么必须在长查询字符串中的每个数字之间添加 OR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234387/

相关文章:

elasticsearch - ElasticSearch查询DSL组合术语和通配符

search - 像关系数据库一样使用 Lucene

php - 如何在elasticsearch中的功能增强查询中排序

mysql - Solr 范围查询对于某些字段无法以正确的方式工作

solr - 使用 Solr 索引维基百科不起作用

java - Solr 通配符搜索不正确的结果

java - 在 Java 中从 Solr 服务器中选择数据

mysql - apache solr 中文档的请求计数

java - Lucene:从索引中挖掘电子邮件地址、姓名和标识符

java - lucene 分数的最大值是多少?