下午的伙计们,
是的,我正在使用 Solr 为网站构建一个相当复杂的(无论如何对我而言)搜索系统,尽管我认为这个问题非常简单......
我有两个搜索条件,位置和类型。我想返回与类型完全匹配的结果(字母到字母,无一异常(exception)),以及位置。
我当前的搜索查询如下
../select/?q=location:N1 type:blue&rows=100&fl=*,score&debugQuery=true
这首先返回所有与 N1 匹配的蓝色类型,然后返回与 N1 匹配的任何类型,这与我所追求的相反。这两个字段在 Solr 模式中都设置为 textgen。
有什么指点吗?
欢呼声
最佳答案
默认情况下,Solr 使用 OR 运算符来组合查询项。如果您只想要包含 location:N1 AND type:blue
而不是 location:N1 OR type:blue
的结果,则需要更改运算符。更改此设置的最简单方法是在查询时向 URL 添加附加参数 q.op=AND
:
../select/?q=location:N1 type:blue&rows=100&fl=*,score&debugQuery=true&q.op=AND
您还可以通过编辑 schema.xml 文件为所有查询更改此设置;寻找
<solrQueryParser defaultOperator="OR"/>
并将其更改为
<solrQueryParser defaultOperator="AND"/>
您可能还想将 type
字段的字段类型更改为未标记化的内容,例如 string
。这将确保该字段的匹配是准确的。
<field name="type" type="string" indexed="true" stored="true"/>
关于java - 优化 Solr 搜索,获得精确匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2745930/