目前,我尝试使用以下查询来限制Elasticsearch(5.4)的结果:
{
"query": {
"bool": {
"must": {
"multi_match": {
"query": "apache log Linux",
"type": "most_fields",
"fields": [
"message",
"type"
]
}
},
"filter": {
"term": {
"client": "test"
}
}
}
}
}
这将返回包含"apache"
,"log
“或"linux"
的每个文档。我想将结果限制为具有精确字段”client“的文档指定值,在这种情况下:"test"
。但是,此查询将返回包含“test”的所有文档作为值。还将返回包含"client": "test client"
的文档。
我希望限制是准确的,因此只应返回包含"client": "test"
的文档,而不是"client": "test client"
。
在测试了大量不同的查询和大量搜索后,我找不到解决问题的方法。我错过了什么?
答案 0 :(得分:1)
在索引上设置映射,指定您的client
字段为keyword
datatype。
映射请求可能看起来像
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"client": {
"type": "keyword"
}
}
}
}
}
答案 1 :(得分:1)
只需使用keyword
字段的client
部分,因为这是5.x而且默认,keyword
已经存在:< / p>
"filter": {
"term": {
"client.keyword": "test"
}
}