【问题标题】:Refining Solr searches, getting exact matches?优化 Solr 搜索,获得完全匹配?
【发布时间】:2011-02-14 07:30:51
【问题描述】:

下午的小伙子们,

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

我有两个搜索条件,位置和类型。我想返回与类型完全匹配的结果(字母对字母,没有例外),并且喜欢位置。

我目前的搜索查询如下

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

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

有什么建议吗?

欢呼团伙

【问题讨论】:

    标签: java solr lucene


    【解决方案1】:

    默认情况下,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"/>
    

    【讨论】:

    • 干杯哥们,一些非常有用的提示,非常感谢:)
    【解决方案2】:

    如果您只想强制“type”子句,您可以保留 OR 作为默认运算符,并在“type”子句前使用编码的“+”号:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多