使用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要按照预期用短语搜索字段,情况就不会这样了。
如果我将短语用引号括起来,我得到零结果。
非常感谢任何正确方向的帮助或推动。
提前致谢
亚历
答案 0 :(得分:2)
这里发生的是您的默认查询字段显示为id
,因为您将查询指定为
idx_text_general_ci:marine fitter
它在Solr中被翻译为idx_text_general_ci:marine
和id:fitter
的DisjunctionMaxQuery。据推测,您需要idx_text_general_ci:marine
和idx_text_general_ci:fitter
。您有两个选择:1)您可以在每个单词前面加上正确的字段,后跟冒号,或者您可以将schema.xml中的defaultSearchField更改为idx_text_general_ci
。
令我感到困惑的是,当你用双引号括起来时,为什么你得到零结果。但是,做到这一点应该会对你有帮助。