2

使用 SOLR 4.0 搜索并尝试短语查询时,我遇到了一个小问题。

我有一个名为“idx_text_general_ci”的字段,它是由所有字段组成的不区分大小写(全部小写)的字段。

当我尝试搜索一个短语(marine fitter)时,我的 SOLR 拒绝搜索该短语,而是将这个短语分成 2 个单词 -

/select?defType=edismax&q=idx_text_general_ci:marine%20fitter&debugQuery=true

debugQuery=true 输出如下:

<lst name="debug">
<str name="rawquerystring">idx_text_general_ci:marine fitter</str>
<str name="querystring">idx_text_general_ci:marine fitter</str>
<str name="parsedquery">
(+(idx_text_general_ci:marine DisjunctionMaxQuery((id:fitter))))/no_coord
</str>
<str name="parsedquery_toString">+(idx_text_general_ci:marine (id:fitter))</str>

正如您在上面看到的,它将查询分成两部分(idx_text_general_ci:marine 然后 id:fitter)。

我遇到的问题是,我在 idx_text_general_ci 字段中出现了两次“marine fitter”,但它的得分低于出现 3 次“marine”一词的文档。我知道如果我的 SOLR 是按预期使用短语搜索字段,情况将不会如此。

如果我将短语用引号括起来,我得到的结果为零。

任何帮助或朝着正确方向轻推将不胜感激。

提前致谢

亚历克斯

4

1 回答 1

2

这里发生的是您的默认查询字段似乎是id,并且因为您将查询指定为

idx_text_general_ci:marine fitter

它在 Solr 中被翻译为idx_text_general_ci:marine和的 DisjunctionMaxQuery id:fitter。大概,你想要idx_text_general_ci:marineand idx_text_general_ci:fitter。您有两个选择:1)您可以在每个单词前面加上正确的字段,后跟一个冒号,或者您可以将 schema.xml 中的 defaultSearchField 更改为idx_text_general_ci

我很困惑为什么当你用双引号括起来时你得到零结果。但是执行上述操作应该会对您有所帮助。

于 2012-07-06T09:12:43.567 回答