按“前缀优先”逻辑对弹性命中进行排序

问题描述

我想实现一个排序的结果集,其中自动建议中搜索词开头的词出现在顶部,然后是在文本中“包含”它的词:例如: 搜索词:倡导者 结果:

拥护x
拥护Yx
一些倡导者

然而,我的结果集为包含该术语的结果提供了更多的分数,而不是那些“以”它开头的结果。我该如何解决这个问题:

映射,js:

{
  "settings": {
    "index": {
      "max_ngram_diff": 39
    },"analysis": {
      "normalizer": {
        "custom_normalizer": {
          "type": "custom","char_filter": [],"filter": [
            "lowercase","asciifolding"
          ]
        }
      },"analyzer": {
        "custom_analyzer": {
          "tokenizer": "custom_tokenizer","filter": [
            "lowercase"
          ]
        },"autocomplete_search": {
          "type": "custom","tokenizer": "keyword","filter": "lowercase"
        }
      },"tokenizer": {
        "custom_tokenizer": {
          "type": "ngram","min_gram": 1,"max_gram": 40,"token_chars": [
            "letter","digit","whitespace","punctuation","symbol"
          ]
        }
      }
    }
  },"mappings": {
    "relations": {  
      "properties": {
      "primaryTerm": {
        "type": "text","analyzer": "custom_analyzer","search_analyzer": "autocomplete_search","fielddata": "true","fields": {
          "raw": {
            "type": "keyword","normalizer": "custom_normalizer"
          }
        }
      },"entityType": {
        "type": "keyword","normalizer": "custom_normalizer"
      },"variants": {
        "type": "text","normalizer": "custom_normalizer"
          }
          }
        }
      }
    }
  }
}

搜索查询:

String query="{"bool": { "should": [ {"query_string": {"query":"advocate","fields": ["primaryTerm" ]}},{"query_string": {"query":"advocate","fields": ["primaryTerm.raw^2" ] } } ]}}";
结果:

enter image description here

其他:

enter image description here

弹性结果:

{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":12,"max_score":6.094379,"hits":[{"_index":"agencyvars","_type":"relations","_id":"qCeqHHgBcFeeTWhjAoua","_score":6.094379,"_source":{"entityType":"Agency","primaryTerm":"ACT ADVOCATES","variants":[]}},{"_index":"agencyvars","_id":"OyeqHHgBcFeeTWhjJYxu","_score":5.6339674,"primaryTerm":"TALWAR ADVOCATES","variants":["TALWAR & ADVOCATES"]}},"_id":"BSeqHHgBcFeeTWhjGIyJ","_score":5.1183944,"primaryTerm":"ZEUSIP ADVOCATES LLP","variants":["ZEUS IP,ADVOCATES","ZEUSIP ADVOCATES","ZEUS IP ADVOCATES","ZEUS IP","ZEUSIPADVOCATES LLP","ZIUSIP ADVOCATES"]}},"_id":"3CeqHHgBcFeeTWhjTYyZ","_score":4.6892724,"primaryTerm":"MURTI & MURTI ADVOCATES","_id":"0SeqHHgBcFeeTWhjjI18","_score":4.4118576,"primaryTerm":"ANAND AND ANAND ADVOCATES","variants":["AANAND & ANAND ADVOCATES","NAND AND ANAND ADVOCATES","ANAND & ANAND,"ANAND & ANAND ADVOCATES","ANAND & ANAND","ANAND&ANAND","ANAND AND ANAND ADVOCAETES","ANAND AND ANAND ADVOCATE","ANAND AND ANANDADVOCATES","AND ANAND ADVOCATES","ANAND & ANAND ADVOCATES.","ANAND AND ANAN","ANAND AND ANAND","ANAND AND ANAND ADVOCATES,","ANAND AND ANAND ADVOCATES.","ANAND AND ANAND,"ANAND AND"]}},"_id":"2CeqHHgBcFeeTWhjTIyn","_score":3.2560868,"primaryTerm":"STAR IP Advocates and IPR Attorneys","variants":["STARIP,ADVOCATES & IP ATTORNEYS"]}},"_id":"3yeqHHgBcFeeTWhjD4uW","_score":2.521993,"primaryTerm":"ADVOCATE AND PATENTS & TRADE MARKS ATTORNEY","variants":[]}}]}}#######3

简而言之,分数是:

score":5.6339674,"_source":{"primaryTerm":"TALWAR ADVOCATES"}

_score":5.1183944,"_source":{"primaryTerm":"INTELLEXIP ADVOCATES}

score":2.521993,"_source":{"primaryTerm":"ADVOCATE AND PATENTS & TRADEMARKS ATTORNEY}

PS:对答案的小解释将不胜感激,因为我是弹性的新手

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)