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。
我正在尝试进行查询,在其中过滤特定术语的术语。这是我正在尝试 运行:
的查询{
"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。