在elasticsearch中用破折号匹配整个字符串


matching whole string with dashes in elasticsearch

我有一个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
    }
}