我在执行针对Elasticsearch v2.2.0的以下请求时遇到问题。如果我删除filter
属性(当然还有内容),我会恢复我的实体(只有一个存在)。使用filter
子句,我得到0结果,但没有错误。如果我删除email
过滤器和/或name
过滤器,则相同。我对此请求做错了吗?
请求
GET http://localhost:9200/my-app/my-entity/_search?pretty=1
{
"query": {
"filtered" : {
"query": {
"match_all": {}
},
"filter": {
"and": [
{
"term": {
"email": "my.email@email.com"
}
},
{
"term": {
"name": "Test1"
}
}
]
}
}
}
}
现有实体
{
"email": "my.email@email.com",
"name": "Test1"
}
映射
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"term": {
"type": "long"
}
}
答案 0 :(得分:0)
由于email
字段为analyzed
且custom analyzer
没有,Standard Analyzer将被应用于它,它将分成令牌。
在这里阅读Standard Tokenizer。
您可以使用以下命令查看my.email@email.com
如何进行标记化。
curl -XGET "http://localhost:9200/_analyze?tokenizer=standard" -d "my.email@email.com".
这将生成以下输出。
{
"tokens": [
{
"token": "my.email", ===> Notice this
"start_offset": 0,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "email.com", ===> Notice this
"start_offset": 9,
"end_offset": 17,
"type": "<ALPHANUM>",
"position": 2
}
]
}
如果您想要完整或精确搜索,则需要进行not_analyzed
。研究如何创建not_analyzed
字段here。
{
"email": {
"type": "string",
"index": "not_analyzed"
}
}
希望很清楚