ElasticSearch,与过滤器多重匹配?

Hen*_*hiu 43 elasticsearch

我在ES中有一个多匹配查询,并希望添加一个过滤器.

{
  "multi_match" : {
    "query" : "this is a test",
    "fields" : [ "subject^2", "message" ]
  }
}
Run Code Online (Sandbox Code Playgroud)

添加此过滤器的语法是什么?

我试过了:

{
  "multi_match" => {
    "query" => "list",
    "fields" => [ "username" ]

  },
"filter" => {
        "term" => { "username" => "slimkicker"}
    }
}
Run Code Online (Sandbox Code Playgroud)

jav*_*nna 67

根据您的需要,您必须将过滤器放在合适的位置.您有两种选择:

使用顶级过滤器并仅将过滤器应用于搜索结果,但不应用于构面

{
    "query" : {
        "multi_match" : {
            "query" : "this is a test",
            "fields" : [ "subject^2", "message" ]
        }
    },
    "filter" : {
        "term" : { "username": "slimkicker" }
    }
} 
Run Code Online (Sandbox Code Playgroud)

使用筛选查询并将筛选器应用于搜索结果和构面

{
    "query" : {
        "filtered" : {
            "query" : {
                "multi_match" : {
                    "query" : "this is a test",
                    "fields" : [ "subject^2", "message" ]
                }
            },
            "filter" : {
                "term" : { "username": "slimkicker" }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你能否详细解释两种选择之间的区别?应该使用哪些用例? (11认同)
  • 在 ElasticSearch 7.6 中,此查询不起作用:`parsing_exception: Unknown key for a START_OBJECT in [filter].` 我认为您不能将过滤器放在查询之外。 (3认同)

Fri*_*rdt 59

使用Elasticsearch 5,语法已更改bool查询的用法,例如

{
  "from" : 0,
  "size" : 10,
  "sort" : "publishDate",
  "query": {
    "bool": {  
      "must" : {
        "multi_match" : {
          "query":      "wedding",
          "type":       "most_fields",
          "fields":     [ "title", "text" ]
        }
      },
      "filter": {
        "term": {
          "locale": "english"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

文档可以在这里找到.


Sha*_*war 7

根据Elasticsearch的新文档,格式几乎没有变化,现在您必须使用boolmust并且可以filter与查询分开应用,如下所示,

{
    'index' : 'users',
        'type' : 'users',
        'body' : {
          "query" : {
            "bool" : {
              "must" : {
                'multi_match' : {
                    'fields' : {'source^1', 'first_name^5', 'last_name^4', 'email^3', 'postcode^2', 'telephone', 'address', 'alternate_address'
                    },
                    'query' : 'Shahrukh Anwar',
                },
              },
              "filter" : {
                "term" : {
                  'assigned_to' : 125
                }
              }
            }
          }
        }
}
Run Code Online (Sandbox Code Playgroud)