通常,当您查询字符串时,Solr会对所有内容进行标记,并找到文档中的所有单词匹配没问题。然而,我遇到了一个有趣的问题,花了我几个小时来弄明白。
比如说我有一个带有字段(fieldtype:text_ws)的文档,名为“ids”,其中包含以下字符串。
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
现在,如果我使用以下内容查询该字段,则只会匹配第一个数字。但是,如果我在每个之间放置OR,那么它几乎可以匹配所有它们。
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>
答案 0 :(得分:2)
如果你在查询 -
例如q=ids:23 128
,仅查询字段ID 23,而schema.xml(通常是文本)中提到的默认搜索字段查询为128.
形成的查询为ids:23 text:128
,因此只会在第一个字词中查询ID,其余部分将在默认文本字段中查询。
你是如何用OR查询的?如果q = ids:(23 OR 128),它将匹配整个ids字段。
您可以使用debugQuery参数检查Solr创建的查询。