下午的小伙子,
是的,我正在为使用Solr的网站构建一个相当复杂的(对我来说)搜索系统,虽然这个问题很简单,我认为......
我有两个搜索条件,位置和类型。我想返回与类型完全匹配的结果(字母到字母,没有例外),以及类似位置。
我当前的搜索查询如下
../ select /?q = location:N1 type:blue& rows = 100& fl = *,score& debugQuery = true
这首先返回匹配N1的所有类型蓝色,但随后返回与N1匹配的任何类型,这与我所追求的相反。这两个字段在Solr架构中设置为textgen。
任何指针?
干杯帮
答案 0 :(得分:4)
默认情况下,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"/>
答案 1 :(得分:2)
如果您只想将“type”子句作为必需条件,则可以将OR保留为默认运算符,并在“type”子句前面使用编码的“+”符号:
./select/?q=location:N1 %2Btype:blue&rows=100&fl=*,score&debugQuery=true