我在Elasticsearch中有这些文件:
{
"id_object": "9",
"size_id": "-1",
"enabled": 1,
"verified": 0,
"countries": [
"Germany"
]
},
{
"id_object": "19",
"size_id": "-1",
"enabled": 1,
"verified": 0,
"countries": [
"Germany",
"France"
]
}
我使用以下查询来提取内部具有“德国”的所有文档:
GET abc/def/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {
"term": {
"countries": "Germany"
}
}
}
}
}
}
}
但它没有返回结果!
我究竟做错了什么?
最佳答案
不对“术语”过滤器进行分析,这意味着它们将与确切的术语匹配,无需使用小写字母,无需进行任何其他过滤或处理。因此,您的查询将按完全匹配的“德国”查询倒排索引,而如果您在将这两个文档放入ES时使用标准分析器,则它们将被记录为“德国”(小写)和“france”小写。
因此,在您的情况下,您的过滤器将如下所示进行匹配:
{ "query": {
"filtered": {
"filter": {
"bool": {
"must": {
"term": {
"countries": "germany"
}
}
}
}
}}}
另一方面,将分析“匹配”查询,因此,如果您要查找“德国”,那么它将匹配:
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{"match": {
"countries": "Germany"
}}
]
}
}
}
}
}