我有两个字段,一个是复制字段。
<field name="product_name" type="text_wslc" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="dummy_name" type="string_ci" indexed="true" stored="false" required="true" />
其定义如下
<fieldType name="text_wslc" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
/>
<filterclass="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" />
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.KStemFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
</analyzer>
<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" />
<filter class="solr.KStemFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
</analyzer>
</fieldType>
提交副本是为了首先获得精确匹配的结果。 我的查询是这样的
/select?q=("笔记本电脑+包")&df=产品名称&defType=edismax&qf=dummy_name^20000+产品名称^0.01
它给了我大约 8000 个结果
但实际结果是20000左右
/select?q=(laptop+bag)&df=product_name&defType=edismax&qf=dummy_name^20000+product_name^0.01
但它不会首先列出确切的结果。 我该如何解决这个问题? 我的查询有问题吗? 这是我的字段和定义
最佳答案
这里发生了一些事情。
首先,搜索“笔记本电脑包”和笔记本电脑包是两个不同的东西,这就是为什么您会得到不同的结果。第一个将搜索确切的短语,而后者将找到任何关键字。因此,当您的搜索查询包含引号时,您看到的结果会减少,这是有道理的。
其次,我认为您的 string_ci 字段的字段定义需要一些调整,此时您的词干意图对我来说有点神秘。另外,请确保该字段的索引设置和查询设置相对相似。使用 Solr Admin UI 分析器调整该字段并查看您的更改如何影响数据输入/输出。
最后,您发布的最后一个字段配置没有字段标签。总体来说,很难说具体问题出在哪里。我建议首先运行一些查询并将 debug 设置为 true 以查看如何评估相关性。我敢打赌,您的字符串字段的索引和查询参数不一致。如果确实如此,您可以在管理 UI 分析器中验证这一点。
祝你好运,解决这个问题。
关于Solr 精确匹配提升 减少结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778551/