我有一个弹性搜索查询,我试图正确匹配,字段数据本身包含 - (破折号),字符串数据是GUIDS
它没有正确匹配,因为它将术语分成由 -
分割的单独单词我已经将查询更改为使用match_phrase查询,如下所示:
"query": {
"filtered": {
"query": {
"match_phrase":{
"guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be"}
}
}
}
}
当我尝试匹配一个GUID时,这很好用。
但是我想尝试匹配多个GUID
所以它目前看起来像
"query": {
"filtered": {
"query": {
"match_phrase":{
"guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be d1091f08-ceff-11e2-ba92-12313916f4be"}
}
}
}
}
我认为它不起作用,因为它试图匹配整个字符串,而不是单独的每个GUID。
我尝试在查询中添加“analyzer”:“whitespace”,但这完全破坏了查询。
那么确保查询查找整个GUID字符串并允许匹配多个GUID的最佳方法是什么?
答案 0 :(得分:4)
出于类似目的,我一直将字段映射设置为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
}
}