在搜索中为文档字段赋予不同的优先级

use*_*936 8 field elasticsearch

我有以下查询:

'{"query": {"query_string": {"query": "ABC"}'
Run Code Online (Sandbox Code Playgroud)

这将搜索给定 index\type ex 中的所有字段。Mytype 有 field1、field2、field3 这将匹配“ABC”到 field1、field2、field3

我需要优先排序字段排名的 3 个字段上放置了相等的值,所以假设优先级应该是 field2、field3、field1

如何修改我的搜索以设置字段排名/优先级?

在我的研究中,我看到了 _score,但它似乎用于对每个文档而不是字段进行优先级排序。

Ewo*_*oks 6

这是更新的 Elasticsearch 版本的更新。像这样的查询应该根据各自的字段内容提升结果:

GET /_search
{ 
  "query":{
    "simple_query_string" : {
      "query": "ABC",
      "fields": [
        "field2^3",
        "field3^2",
        "field1^1"]
    }
  }  
}
Run Code Online (Sandbox Code Playgroud)

注意field2后面的“^3” ,这会提升结果,所以如果在所有字段中找到“ABC”,它们将被排序为:

  1. field2包含“ABC”的文档
  2. field3包含“ABC”的文档
  3. field1包含“ABC”的文档


小智 4

使用 boost 查询并根据您想要的优先级对字段进行加权: https://www.elastic.co/guide/en/elasticsearch/guide/current/_boosting_query_clauses.html