2012-02-10 33 views
2

通常当你查询一个字符串时,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

你可以从'schema.xml'发布'test_ws'字段的定义吗? – javanna 2012-02-10 22:58:13

+0

看起来有些价值被忽略?尝试使字段存储,以查看文档的实际外观。 – Fuxi 2012-02-11 21:51:48

+0

@Fuxi - 该字段是索引并存储。虽然我可能误解了你的建议。 – IOInterrupt 2012-02-11 22:00:37

回答

2

如果您正在查询 -
例如q=ids:23 128,只查询字段id为23,而schema.xml中提到的默认搜索字段(通常是文本)被查询为128.
查询形成的是ids:23 text:128,所以只有id会被查询为第一项,其余将在默认文本字段中被查询。

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

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

+0

我发现它在通过debugQuery时回落到默认字段。我的解决方案是q = ids:23或ids:128,所以你提到的内容很可读,但我需要确保我也可以为它们添加提升。如果我想增加一个特定的字段,它必须在每个查询项上q = ids:(23^2或128^2),或者我可以像q = ids那样做:(23或128)^ 2 ? – IOInterrupt 2012-02-12 18:18:39

+0

我正在做的是实际查询该ID字段上的一串ID号码,但同时也需要将文本与另一个字段进行比较。我宁愿这些ID比其他领域的单词匹配更具影响力。 – IOInterrupt 2012-02-12 18:23:59

相关问题