Elasticsearch 没有 return 特定术语搜索的结果

Elasticsearch doesn't return results for a specific term search

我正在尝试进行查询,在其中过滤特定术语的术语。这是我正在尝试 运行:

的查询
{
    "query": {
        "filtered": {
            "filter": {
                "term": {
                    "tags": "sports"
                }
            }
        }
    },
    "sort": {
        "timestamp": "desc"
    }
}

当我 运行 使用不同字段的相同查询时 (ex: "type": "blog_post") 它有效,所以我对语法有信心。

我检查以确保 tags 已正确映射(我检查了“http://server_name/index/_mapping”),确实如此。

我还检查了Elasticsearch中有"tags" : "sports"的文档。

知道问题出在哪里吗?只有那个字段,所有其他字段都有效,并且 "tags" 已编入索引。

根据您描述的用例,我假设 tags 被映射为值数组。也就是说,term filter 只能用于 完全匹配

我会尝试使用 terms filter or exist filter 并将查询更改为:

"terms" : { "tags" : "sports" }

或这个

"exists" : { "tags" : "sports" }

您为字段 "tags" 定义的 mapping/analyzer 是什么?如果您没有定义任何分析器,那么它将使用标准分析器进行分析,这反过来会给出词干标记 "sport" 而不是 "sports"

如果您进行字词搜索或字词过滤,系统不会分析输入,而是会尝试搜索完全匹配的内容。所以搜索字词 "sports" 不会匹配。

您应该将标签的映射更改为 "not_analyzed",或者将搜索查询更改为术语以外的内容,例如 query string query