elasticsearch elasticsearch跨多个字段查询具有模糊性的术语,elasticsearch,elasticsearch" /> elasticsearch elasticsearch跨多个字段查询具有模糊性的术语,elasticsearch,elasticsearch" />

elasticsearch elasticsearch跨多个字段查询具有模糊性的术语

elasticsearch elasticsearch跨多个字段查询具有模糊性的术语,elasticsearch,elasticsearch,我正在建立一个商业搜索引擎,根据用户输入的查询来搜索商业联系信息。业务信息以以下形式存储在elasticsearch索引中: "_source" : { "id" : 53, "name" : "Judge Pouros", "email" : "roob.alberto@example.com", "phone" : "+1-783-850-2127", "created_at" : "02/1

我正在建立一个商业搜索引擎,根据用户输入的查询来搜索商业联系信息。业务信息以以下形式存储在elasticsearch索引中:

"_source" : {
          "id" : 53,
          "name" : "Judge Pouros",
          "email" : "roob.alberto@example.com",
          "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" : "zwillms@example.info",
              "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*"
        }
    }
}
但没有返回任何结果。我要做的是在用户查询中查找包含模糊术语的文档,以允许错误销售

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


有没有更简单的查询可以做到这一点?

因为您想搜索整个文档,我建议使用

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

您的查询如下所示:

{
  "query": {
    "multi_match" : {
      "query" : "example travel renfrewshire",
      "fields" : [ * ] 
    }
  }
}
您还可以在匹配/多匹配查询中定义模糊性

看一看这张照片

编辑:

如文件所述:

如果未提供任何字段,则multi_match查询默认为index.query.default_字段索引设置,后者又默认为*提取映射中符合术语查询条件的所有字段,并筛选元数据字段。然后将所有提取的字段合并以生成查询


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

因为您希望搜索整个文档,我建议使用

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

您的查询如下所示:

{
  "query": {
    "multi_match" : {
      "query" : "example travel renfrewshire",
      "fields" : [ * ] 
    }
  }
}
您还可以在匹配/多匹配查询中定义模糊性

看一看这张照片

编辑:

如文件所述:

如果未提供任何字段,则multi_match查询默认为index.query.default_字段索引设置,后者又默认为*提取映射中符合术语查询条件的所有字段,并筛选元数据字段。然后将所有提取的字段合并以生成查询


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

您要搜索哪个字段?用户术语可以匹配文档中的任何字段,因此我确实需要搜索所有字段。您要搜索哪个字段?用户术语可以匹配文档中的任何字段,因此,我确实需要针对所有字段进行搜索请记住,所有字段上的multi_匹配当然比在定义的字段集上搜索的查询慢/资源密集(这并不意味着Elasticsearch无法处理这一点!)。因此,也许您可以找出哪些字段中永远不会出现这些术语。请记住,所有字段上的多重匹配当然比在定义的字段集上搜索的查询慢/资源密集(这并不意味着Elasticsearch无法处理!)。因此,也许你可以找出哪些字段中永远不会出现这些术语。