我在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)
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)
文档可以在这里找到.
根据Elasticsearch的新文档,格式几乎没有变化,现在您必须使用bool,must并且可以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)
| 归档时间: |
|
| 查看次数: |
42675 次 |
| 最近记录: |