弹性搜索精确短语匹配

时间:2015-05-20 22:54:24

标签: search elasticsearch phrase

我是ES的新手。我无法找到确切的短语匹配。

假设我的索引有一个名为movie_name的字段。 假设我有3个具有以下值的文档

  1. movie_name = Mad Max
  2. movie_name = mad max
  3. movie_name = mad max 3d
  4. 如果我的搜索查询是Mad Max,我希望返回前2个文档而不是第3个。

    如果我执行“not_analyzed”解决方案,我将只获得文档1而不是2.

    我错过了什么?

2 个答案:

答案 0 :(得分:4)

我能够使用以下命令来执行此操作,基本上创建自定义分析器,使用关键字tokenizer来防止标记化。然后在“映射”中使用分析器获取所需的字段,在本例中为“movie_name”。


        PUT /movie
        {
      "settings":{
         "index":{
            "analysis":{
               "analyzer":{
                  "keylower":{
                     "tokenizer":"keyword",
                     "filter":"lowercase"
                  }
               }
            }
         }
      },
        "mappings" : {
            "search" : {
                "properties" : {
                    "movie_name" : { "type" : "string", "analyzer":"keylower" }
                }
            }
        }
    }

答案 1 :(得分:0)

像这样使用Phrase matching

{
"query": {
    "match_phrase": {
        "movie_name": "a"
    }
}
}