我在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"
}
}
}
}
}
} }
但它没有返回任何结果! 我做错了什么?
答案 0 :(得分:2)
"期限"过滤器不会被分析,这意味着它们将匹配精确的术语,而不需要小写,无需任何其他过滤或处理。因此,您的查询将通过完全匹配"德国"来查看倒排索引,而如果您在ES中放置这两个文档时使用标准分析器,则它们将被记录为"德国&# 34; (小写)和"法国"小写。
因此,在您的情况下,您的过滤器将匹配如下:
{ "query": {
"filtered": {
"filter": {
"bool": {
"must": {
"term": {
"countries": "germany"
}
}
}
}
}}}
另一方面,"匹配"我们将对您的查询进行分析,因此,如果您正在寻找"德国",那么这将匹配:
{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{"match": {
"countries": "Germany"
}}
]
}
}
}
}
}