Solr搜索响应顺序:基于令牌位置



我想要按匹配代币位置排序的搜索结果文档

示例:我有以下文档:

1. indian institute of technology
2. cultural arts institute
3. institute of Management
4. institute of Arts

search query : ins*
localhost:6983/solr/ts/select?fl=name&indent=true&q.op=OR&q=name%3Ains*
Expected response : 
3. institute of Management  ----> (institute position ->1)
4. institute of Arts        -----> (institute position ->1)
1. indian institute of technology --> (institute position ->2)
2. cultural arts institute   ------> (institute position ->3)

文件:托管架构


<fieldType name="single_keyword" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.ClassicTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.ClassicTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

Debug reference : 
http://localhost:6983/solr/ts/select?fl=name&indent=true&q.op=OR&q=name%3Ains*&debug=true
"debug": {
"rawquerystring": "name:ins*",
"querystring": "name:ins*",
"parsedquery": "name:ins*",
"parsedquery_toString": "name:ins*",
"explain": {
"institute_187": "n1.0 = name:ins*n",
"institute_188": "n1.0 = name:ins*n",
"institute_189": "n1.0 = name:ins*n",
"institute_1036": "n1.0 = name:ins*n",
"institute_1037": "n1.0 = name:ins*n",
"institute_2027": "n1.0 = name:ins*n",
"institute_2028": "n1.0 = name:ins*n",
"institute_2029": "n1.0 = name:ins*n"
},
"QParser": "LuceneQParser",
"timing": {......}}}

我在autoSugest中尝试过,但它不适合我的用例,使用autoSugest的缺点是:无法对多个值和字段运行筛选器,无法在响应时返回多个字段

可能有一种更简单的方法来实现您想要的,但这肯定可以使用自定义记分器来处理。这个博客解释了创建自定义记分器的过程,并概述了其他角度,通过这些角度你可以解决这个问题

最新更新