SOLR短语查询

时间:2012-07-06 08:45:30

标签: solr edismax

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

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

当我尝试搜索短语(海洋钳工)时,我的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字段中出现两次“海洋钳工”的完全匹配但是它的分数小于具有“海洋”字样出现3次的文档。我知道如果我的SOLR要按照预期用短语搜索字段,情况就不会这样了。

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

非常感谢任何正确方向的帮助或推动。

提前致谢

亚历

1 个答案:

答案 0 :(得分:2)

这里发生的是您的默认查询字段显示为id,因为您将查询指定为

idx_text_general_ci:marine fitter

它在Solr中被翻译为idx_text_general_ci:marineid:fitter的DisjunctionMaxQuery。据推测,您需要idx_text_general_ci:marineidx_text_general_ci:fitter。您有两个选择:1)您可以在每个单词前面加上正确的字段,后跟冒号,或者您可以将schema.xml中的defaultSearchField更改为idx_text_general_ci

令我感到困惑的是,当你用双引号括起来时,为什么你得到零结果。但是,做到这一点应该会对你有帮助。