我正在使用Solr 6来实现搜索引擎。我面临的问题是,当我搜索单词时,它首先返回一些其他结果,实际查询位于数字6
例如,我正在搜索 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>
答案 0 :(得分:2)
如果您希望提高包含所有查询字词的文档的分数,则可以使用字段名称的值传递pf
参数。在您的情况下,您应该通过pf=name
(pf
代表短语字段)。 eDisMax query parser会尝试在q
参数中的所有字词中进行短语查询,如果它能够在任何短语字段中找到确切的短语,它会将指定的提升应用于匹配该文件。
如果您在默认情况下未使用eDisMax查询解析器,则可以通过传递q={!edismax pf=name}cafe 9
暂时将其用于当前查询。
您还可以传递pf2参数(与pf2=name
中一样),其工作方式类似于pf
,但生成的词组查询是您bigrams中的pf3查询(即,每两个连续的术语将被视为助推短语)。如果恰好是你正在寻找的话,还有一个{{3}}参数。
您还可以自定义提升并将多个字段名称传递给短语邻近度参数(例如,pf=name^2 title^3
)。