为什么必须在长查询字符串中的每个数字之间添加 OR?
通常,当您查询字符串时,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>
Typically when you query a string Solr will tokenize everything and find all word matches in a document no problem. However I ran into an interesting issue that took me a couple of hours to figure out.
Say for example I have a document with a field (fieldtype: text_ws) called "ids" which contains the following string.
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
Now if I queried against that field with the following it would only match the first digit. However if I put OR between each one then it would match almost all of them as it should.
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
What's the deal with this?
Additionally, how can I prevent Solr from boosting scores? What if I just want to know what percentage of the items from the query matched?
text_ws definition
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您正在查询 -
例如
q=ids:23 128
,仅查询23的字段id,而查询128的schema.xml中提到的默认搜索字段(通常是文本)。查询格式为
ids:23 text:128
,因此只会查询第一个术语的 ids,其余部分将在默认文本字段中查询。您如何使用 OR 进行查询?如果 q=ids:(23 OR 128),它将匹配整个 ids 字段。
您可以使用 debugQuery 参数来检查 Solr 创建的查询。
If you are querying -
e.g.
q=ids:23 128
, only the field ids is queried for 23 while the default search field mentioned in schema.xml (usually text) is queried for 128.Query formed is
ids:23 text:128
, so only the ids would be queried for the first term and the rest would be queried on the default text field.How are you querying with OR ? If q=ids:(23 OR 128), it would match the entire ids field.
You can use the debugQuery parameter to check the query created by Solr.