如何在具有多个分析器的字段上实现模糊的以字段为中心(cross_fields)查询?

时间:2018-04-16 16:34:46

标签: elasticsearch

映射:

{
  "articles" : {
    "mappings" : {
      "data" : {
        "properties" : {
          "author" : {
            "type" : "text",
            "analyzer" : "standard"
          },
          "content" : {
            "type" : "text",
            "analyzer" : "english"
          },
          "tags" : {
            "type" : "keyword"
          },
          "title" : {
            "type" : "text",
            "analyzer" : "english"
          }
        }
      }
    }
  }
}

示例数据:

{
    "author": "John Smith",
    "title": "Hello world",
    "content": "This is some example article",
    "tags": ["programming", "life"]
}

因此,您可以看到我在不同领域使用不​​同的分析器进行映射。现在我想以下列方式搜索这些字段:

  • 仅返回与所有搜索关键字匹配的文档(例如 multi_match cross_fields 作为类型作为运算符
  • 查询应该是模糊的,因此它可以容忍一些拼写错误
  • 不同的字段应具有不同的提升值(例如标题比内容更重要)

例如,以下查询应与上述文档匹配:

programing worlds john examlpe

我该怎么办?根据{{​​3}},fuzziness不会使用cross_fields,也不会使用不同的分析器。 一种方法是使用copy_to实现自定义_all字段并处理所有值,但是使用这种方法我不能指定不同的权重,也不能使用不同的分析器。

0 个答案:

没有答案