跨多个字段的弹性搜索查询具有模糊性的术语

joshpj1

我正在构建一个商业搜索引擎,以根据用户输入的查询搜索商业联系方式。企业信息以下列形式存储在弹性搜索索引中:

"_source" : {
          "id" : 53,
          "name" : "Judge Pouros",
          "email" : "[email protected]",
          "phone" : "+1-783-850-2127",
          "created_at" : "02/10/2019 16:30",
          "updated_at" : "02/10/2019 16:30",
          "travel_agencies" : [
            {
              "id" : 1234,
              "abta" : "A1234",
              "name" : "The Example Travel Agency",
              "address_id" : 27,
              "email" : "[email protected]",
              "comm_rate" : 14.0,
              "travel_agency_type_id" : 1,
              "address" : {
                "id" : 27,
                "line_1" : "Flat 52",
                "line_2" : "Flat 82i\nKaren Circles",
                "town" : "Kimberlyside",
                "county" : "Renfrewshire",
                "country_id" : 189,
                "postcode" : "SM3 9QR",
                "created_at" : "2019-10-02 16:31:01",
                "updated_at" : "2019-10-02 16:31:01",
                "country" : {
                  "id" : 189,
                  "code" : "MF",
                  "name" : "Saint Martin (French part)",
                  "translations" : [
                    {
                      "id" : 189,
                      "locale" : "en",
                      "country_id" : 189,
                      "name" : "Saint Martin (French part)"
                    }
                  ]
                }
              }
            }

假设客户正在搜索“example travel renfrewshire”。我希望返回上述结果。我目前使用以下查询字符串:

{
    "query": {
        "query_string": {
            "query": "*example*travel*renfrewshire*"
        }
    }
}

但是没有返回任何结果。我正在尝试做的是查找包含用户查询中的术语的文档,并且模糊不清以允许拼写错误。

我曾考虑过对特定术语进行模糊匹配,但我不知道用户查询的哪些术语可能匹配,因此我需要检查所有术语。

是否有一个更简单的查询可以做到这一点?

apt-get_install_skill

由于您想搜索整个文档,我建议使用multi match query

这将对提供的字段执行全文搜索。

您的查询将如下所示:

{
  "query": {
    "multi_match" : {
      "query" : "example travel renfrewshire",
      "fields" : [ * ] 
    }
  }
}

您还可以在 match/multi_match 查询上定义模糊性。

看一看模糊文档

编辑:

如文档中所述:

如果未提供字段,则 multi_match 查询默认为 index.query.default_field 索引设置,而后者默认为 *。* 提取映射中符合术语查询条件的所有字段并过滤元数据字段。然后组合所有提取的字段以构建查询。

您甚至不必定义字段设置,因为它默认为 * (全部符合条件)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章