弹性搜索精确短语匹配

8

我是ES的新手,我在寻找确切短语匹配方面遇到了麻烦。

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

  1. movie_name = Mad Max
  2. movie_name = mad max
  3. movie_name = mad max 3d

如果我的搜索查询是Mad Max,则希望返回前两个文档,但不要返回第三个文档。

如果我使用“not_analyzed”解决方案,则只会得到文档1,但不会得到文档2。

我错过了什么?

2个回答

4
我可以使用以下命令完成此操作,通常需要创建自定义分析器,使用关键字分词器来防止分词。然后在所需字段的“映射”中使用该分析器,例如“movie_name”。
PUT /movie
{
  "settings":{
     "index":{
        "analysis":{
           "analyzer":{
              "keylower":{
                 "tokenizer":"keyword",
                 "filter":"lowercase"
              }
           }
        }
     }
  },
    "mappings" : {
        "search" : {
            "properties" : {
                "movie_name" : { "type" : "string", "analyzer":"keylower" }
            }
        }
    }
}


0
使用 短语匹配 的方法如下:

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

我尝试了这个,但它仍然返回“疯狂的麦克斯3D”。正如文档所说:“但仅保留包含所有搜索词的文档”,在我的情况下,两个术语都在“疯狂的麦克斯3D”中找到。 - userab12345
电影名称是否是一个已分析的字段?因为查询必须匹配大小写的事实可以通过分析该字段来解决。 - Master Mind
您的分析器是否应用了小写分析器? - Master Mind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接