我有一个elasticsearch查询,我试图正确匹配,字段数据本身包含-(破折号),字符串数据是GUIDS
没有正确匹配,因为它将术语分成了由-
分隔的单独的单词我已经将查询更改为使用match_phrase查询,如下所示:
"query": {
"filtered": {
"query": {
"match_phrase":{
"guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be"}
}
}
}
}
当我试图匹配一个GUIDS时,这工作得很好。
但是我正在尝试匹配多个GUIDS
所以它现在看起来是
"query": {
"filtered": {
"query": {
"match_phrase":{
"guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be d1091f08-ceff-11e2-ba92-12313916f4be"}
}
}
}
}
我认为它不能工作,因为它试图匹配整个字符串,而不是单独匹配每个GUID。
我尝试在查询中添加"analyzer": "whitespace",但这完全破坏了查询。
那么,确保查询查找整个GUID字符串并允许多个GUIDS匹配的最佳方法是什么?出于类似的目的,我一直将字段映射设置为not_analyzed
"guid" : {
"type" : "string",
"index" : "not_analyzed"
}
手动构建查询就可以了。
{
"bool" : {
"should" : [
{
"term" : { "guid" : "bd2acb42-cf01-11e2-ba92-12313916f4be" }
},
{
"term" : { "guid" : "d1091f08-ceff-11e2-ba92-12313916f4be" }
}
],
"minimum_number_should_match" : 1
}
}