【问题标题】:Solr search does not return exact matchSolr 搜索不返回完全匹配
【发布时间】:2017-02-16 10:19:13
【问题描述】:


我正在使用 Solr 6 来实现一个搜索引擎。我面临的问题是,当我搜索单词时,它首先返回一些其他结果,而实际查询位于第 6 位。
例如,我正在搜索 Cafe 9
它返回给我这个...

  • NECOS NATURAL STORE & CAFE
  • SATTAR BUKSH 咖啡厅
  • 粉色凯迪拉克咖啡厅和餐厅
  • 咖啡馆摇滚拉合尔
  • 咖啡馆厨师扎基尔
  • 咖啡厅9


  • 我想要的是它显示 Cafe 9 在第一名,然后其他结果因为 Cafe 9 是完全匹配的..



    我已经为 text_general 类型的所有字段编制了索引,并附上了 schema.xml。

    提前致谢。

         <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
          <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <!-- in this example, we will only use synonyms at query time
            <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
            -->
            <filter class="solr.ApostropheFilterFactory"/>
            <filter class="solr.ShingleFilterFactory" maxShingleSize="5" outputUnigrams="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
          <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.ApostropheFilterFactory"/>
            <!-- <filter class="solr.ShingleFilterFactory" maxShingleSize="5" outputUnigrams="true"/> -->
            <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
        </fieldType>

    【问题讨论】:

    • 如果您正在寻找完全匹配,您可以使用字符串作为 fieldType 或使用关键字标记器来索引数据...
    • 您如何查询您的索引?如果您使用的是 dismax/edismax,请尝试将 pf / pf2 权重应用于字段。您是否只查询名称字段?
    • 是的,我正在查询名称字段。 localhost:8983/solr/abc/select?q=name:(cafe 9) ...这是我的搜索网址..

    标签: search solr


    【解决方案1】:

    如果您想提高包含所有查询词的文档的分数,那么您可以将pf 参数与字段名称的值一起传递。在您的情况下,您应该传递 pf=namepf 代表短语字段)。 eDisMax query parser 将尝试从 q 参数中的所有术语中进行短语查询,并且如果它能够在任何短语字段中找到确切的短语,它会将指定的提升应用于该文档的匹配项.

    如果您默认不使用 eDisMax 查询解析器,您可以通过传递 q={!edismax pf=name}cafe 9 将其临时用于当前查询。

    您还可以传递pf2 参数(如pf2=name),其工作方式类似于pf,除了生成的短语查询是您查询中的bigrams(即每两个连续的术语将被视为助推词)。还有一个pf3 参数,如果这恰好是您正在寻找的。​​p>

    您还可以自定义提升并将多个字段名称传递给短语邻近参数(例如,pf=name^2 title^3)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多