假设:
我在ElasticSearch中加载了一个实例,其placeId
属性设置为"Foo"
。
我运行以下搜索:
{
"query": {
"term": {
"placeId": {
"value": "Foo"
}
}
}
}
{
"filter": {
"term": {
"placeId": "Foo"
}
}
}
{
"query": {
"match": {
"placeId": {
"query": "Foo"
}
}
}
}
但是在这三个中,只有第三个返回了结果。
这是为什么?难道他们都不应该返回结果吗?
答案 0 :(得分:2)
默认情况下,使用标准分析器,ES将“Foo”放在索引中作为“foo”(意思是小写)。在搜索term
时,ES不使用分析器,因此它实际上是在搜索“Foo”(确切的情况)。然而,在其索引中存在“foo”(因为分析器)。
分析了传递给match
的值,ES实际上在其索引中搜索“foo”,而不是像term
那样搜索“Foo”。
所以,你看到的行为是正常的,这就是它应该如何运作。
Here关于match
:
一系列匹配查询,接受文本/数字/日期,分析,并从中构建查询。
Here关于term
:
匹配包含字词(未分析)的字段的文档。
答案 1 :(得分:0)
如果未使用u,则分析器表示弹性搜索词查询和术语查询过滤器不应支持大写值。请使用" foo"在您的查询中。请用这种方式
curl -XGET localhost:9200/index/incident/_search -d '{
"query":{
"term":{"field1":{"value":"value1"}
}}}'
但匹配所有查询是支持大小写。 希望它能奏效。