我们如何根据关键字的位置对查询结果进行排序?
我只在标签栏
上开始搜索当我有
时我们应该使用什么参数来恢复此订单?
我使用Drupal进行连接并向solr发送查询。
答案 0 :(得分:0)
如果您的域名非常包含,并且您知道标签的大小,那么您可以通过复制字段和dismax查询解析器获得接近您想要的内容。 具体来说,你可以建立N" copyfields"这样:
<field name="label" type="text_general" indexed="true" stored="true"/>
<field name="label_3" type="text_first_3" indexed="true" stored="true"/>
<field name="label_5" type="text_first_5" indexed="true" stored="true"/>
...
<fieldType name="text_first_3" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenPositionFilterFactory" maxTokenPosition="3" consumeAllTokens="false" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_first_5" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenPositionFilterFactory" maxTokenPosition="5" consumeAllTokens="false" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
...
<copyField source="label" dest="label_3"/>
<copyField source="label" dest="label_5"/>
&#13;
这要归功于限制标记位置过滤器[1]。 然后,您可以使用edismax指定不同的提升:
qf =&#34; label_3 ^ 5 label_5 ^ 2 label&#34;
这里也讨论了这个问题[2]。
这里提到了另一种方法[3]。