Solr搜索不会返回完全匹配

时间:2017-02-16 10:19:14

标签: search solr


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

  • NECOS NATURAL STORE& CAFE
  • SATTAR BUKSH CAFE
  • PINK CADILLAC CAFE& RESTAURANT
  • CAFE ROCK LAHORE
  • CAFE CHEF ZAKIR
  • CAFE 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>

    1 个答案:

    答案 0 :(得分:2)

    如果您希望提高包含所有查询字词的文档的分数,则可以使用字段名称的值传递pf参数。在您的情况下,您应该通过pf=namepf代表短语字段)。 eDisMax query parser会尝试在q参数中的所有字词中进行短语查询,如果它能够在任何短语字段中找到确切的短语,它会将指定的提升应用于匹配该文件。

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

    您还可以传递pf2参数(与pf2=name中一样),其工作方式类似于pf,但生成的词组查询是您bigrams中的pf3查询(即,每两个连续的术语将被视为助推短语)。如果恰好是你正在寻找的话,还有一个{{3}}参数。

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