我在Solr 4.0
中有一些文件。我希望首先显示最相关的记录,然后显示不太相关的记录。
例如,我有3个文件,标题如下 -
现在我查询类似q=title:Income Distribution Policy
,
我想首先显示3号文件(因为前3个单词是完全匹配)然后我希望文档编号1显示第二个(除了“朝向”剩下的匹配)然后我想要文件编号2显示(因为中间有一些文字)。
我的schema.xml
看起来像这样 -
<types>
<fieldType name="search" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
</types>
<fields>
<field name="title" type="search" indexed="true" stored="true"/>
</fields>
编辑1调试输出
"rawquerystring": "title:Income Distribution Policy",
"querystring": "title:Income Distribution Policy",
"parsedquery": "title:incom title:distribut title:polici",
"parsedquery_toString": "title:incom title:distribut title:polici"
编辑2修改了fieldType
我使用了以下组合,但输出仍然相同。
答案 0 :(得分:1)
如果您没有按其他方式排序,则按相似性/相关性排序。因此,如果您没有按照正确的顺序获得结果,您可能需要了解如何分配权重以及您正在使用的查询解析器。
我假设您正在使用eDismax和标题字段上的提升。另外,请查看 mm (最小匹配)和 pf (词组字段)以进行提升。
您可能还希望使用fieldType上设置的autoGeneratePhraseQueries字段进行测试。
当然,查询中的 debugQuery = true 将帮助您查看正在发生的事情。您可能会发现,在尝试读取调试输出的前几次,添加 debug.explain.structured = true 也很有用。
答案 1 :(得分:1)
我尝试使用""
围绕查询字符串进行操作。
喜欢 - q=title:"Income Distribution Policy" OR title:Income Distribution Policy
。
这给了我输出文件1然后文件3然后文件2.不完美但足够接近。