精炼Solr搜索,获得完全匹配?

时间:2010-04-30 16:07:34

标签: java solr lucene

下午的小伙子,

是的,我正在为使用Solr的网站构建一个相当复杂的(对我来说)搜索系统,虽然这个问题很简单,我认为......

我有两个搜索条件,位置和类型。我想返回与类型完全匹配的结果(字母到字母,没有例外),以及类似位置。

我当前的搜索查询如下

  

../ select /?q = location:N1 type:blue& rows = 100& fl = *,score& debugQuery = true

这首先返回匹配N1的所有类型蓝色,但随后返回与N1匹配的任何类型,这与我所追求的相反。这两个字段在Solr架构中设置为textgen。

任何指针?

干杯帮

2 个答案:

答案 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