【问题标题】:Elastic Search - Query with dynamic object and wildcard弹性搜索 - 使用动态对象和通配符进行查询
【发布时间】:2017-09-02 10:59:30
【问题描述】:

我有以下格式的数据:

{ "_id":1,
  "s_id":121211,
  "data_detail":{
      "name":"John",
      "phone_number":08089320xxx,
      "city":"ABC"
  }
}

我需要通过弹性搜索来搜索数据,它将查询 where s_id=?以及 data_detail 对象中可用的任何文本。示例 s_id=121211 AND ABC。我需要 data_detail 对象上的通配符。

data_detail 对象的键不固定。

提前致谢。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我会考虑像这样使用带有 multi_match 和 term 查询的 bool 查询。我还没有测试过这个,但我猜这些线上的东西应该可以工作。

    GET test_index/_search 
    {
      "query": {
        "nested": {
          "path": "data_detail",
          "query": {
            "bool": {
              "must": [
                {
                  "multi_match": {
                    "query": "ABC",
                    "fields": [
                      "data_detail.*"
                    ]
                  }
                },
                {
                  "term": {
                    "s_id": {
                      "value": "121211"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    【讨论】:

    • 如何在查询中提供通配符:"ABC"
    • 您是否尝试过上述方法并尝试用通配符替换查询“ABC”,其余语法相同?理想情况下应该以同样的方式工作,但如果你尝试过,你会得到什么结果?
    • 用 ABC 试过了,它工作正常。我需要放这样的东西 A.
    【解决方案2】:

    使用以下查询解决了这个问题:

    {
      "query": {
        "bool": {
          "must": [
            {
               "query_string":{
                  "fields":["data_detail.*"],
                  "query": "*str*",
                  "analyze_wildcard":true
                }
              },
            {
              "term": {
                "s_id": {
                  "value": "121211"
                }
              }
            }
          ]
        }
      }
     }
    

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2021-01-18
      • 2021-02-28
      相关资源
      最近更新 更多