【问题标题】:elastic search exact phrase matching弹性搜索精确词组匹配
【发布时间】:2015-08-02 09:54:37
【问题描述】:

我是 ES 的新手。我无法找到完全匹配的词组。

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

  1. movie_name = 疯狂的麦克斯
  2. movie_name = 疯狂的麦克斯
  3. movie_name = mad max 3d

如果我的搜索查询是 Mad Max,我希望返回前 2 个文档而不是第 3 个。

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

我错过了什么?

【问题讨论】:

    标签: search elasticsearch phrase


    【解决方案1】:

    像这样使用Phrase matching

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

    【讨论】:

    • 我试过了,但这仍然会返回“mad max 3d”。正如文档所说“但只保留包含所有搜索词的文档”,在我的情况下,这两个词都在“mad max 3d”中找到。
    • movie_name 是一个分析字段吗?因为查询必须匹配大小写的事实可以通过分析字段来解决
    • 您在分析器中应用了小写分析器吗?
    【解决方案2】:

    我可以使用以下命令来做到这一点,基本上是创建一个自定义分析器,使用关键字 tokenizer 来防止标记化。然后在所需字段的“映射”中使用分析器,在本例中为“movie_name”。

    放/电影 { “设置”:{ “指数”:{ “分析”:{ “分析仪”:{ “键下”:{ “分词器”:“关键字”, “过滤器”:“小写” } } } } }, “映射”:{ “搜索” : { “特性” : { “电影名称”:{“类型”:“字符串”,“分析器”:“keylower”} } } } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 2014-08-18
      • 2012-02-01
      相关资源
      最近更新 更多