代码之家  ›  专栏  ›  技术社区  ›  Tom cmoron

改进solr搜索,获得精确匹配?

  •  1
  • Tom cmoron  · 技术社区  · 15 年前

    下午的小伙子们,

    对,我正在用solr为一个网站构建一个相当复杂的搜索系统,尽管这个问题很简单,我想…

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

    我当前的搜索查询如下

    .. /选择/?Q=位置:n1类型:蓝色行=100&fl=*,score&debugquery=true

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

    有什么线索吗?

    欢帮

    2 回复  |  直到 15 年前
        1
  •  2
  •   Pascal Dimassimo    15 年前

    如果只希望“type”子句是必需的,则可以保留或作为默认运算符,并在“type”子句前面使用编码的“+”符号:

    ./select/?q=location:N1 %2Btype:blue&rows=100&fl=*,score&debugQuery=true
    
        2
  •  4
  •   Siddhartha Reddy    15 年前

    默认情况下,solr使用or运算符组合查询项。如果你只想要结果 location:N1 AND type:blue 而不是 location:N1 OR type:blue ,您需要更换接线员。最简单的更改方法是添加一个附加参数 q.op=AND 查询时指向URL:

    ../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"/>