【问题标题】:How to search this set of fields using query_string syntax in elasticsearch如何在 elasticsearch 中使用 query_string 语法搜索这组字段
【发布时间】:2016-12-05 03:06:33
【问题描述】:

可能是我创建的索引有误,但我有一个包含变量字段名称的前导索引,我需要对其进行搜索。我创建了一个名为 fields 的子对象,其中包含名称和值。示例:

[
  {
    "name": "first_name",
    "value": "XXX"
  },
  {
    "name": "last_name",
    "value": "XXX"
  },
  {
    "name": "email",
    "value": "X0@yahoo.com"
  },
  {
    "name": "address",
    "value": "X Thomas RD Apt 1023"
  },
  {
    "name": "city",
    "value": "phoenix"
  },
  {
    "name": "state",
    "value": "AZ"
  },
  {
    "name": "zip",
    "value": "12345"
  },
  {
    "name": "phone",
    "value": "5554448888"
  },
  {
    "name": "message",
    "value": "recently had XXXX"
  }
]

name 字段是 not_analyzedvalue 字段是 analyzed,而不是 .exact 和 .search

我想我可以从查询字符串查询中得到我想要的结果

+fields.name: first_name +fields.value.exact: XXX

但它并不像我想象的那样工作。我认为这是因为我试图将其用作 mysql 而不是 nosql,而且我必须有一个基本的大脑转变。

【问题讨论】:

    标签: lucene elasticsearch


    【解决方案1】:

    虽然您采用的方法可能需要付出足够的努力,但最好为所有内容使用明确的字段名称,例如: { "name.first_name" : "XXX", "name.last_name" : "XXX", ETC... }

    那么你的 query_string 看起来像这样: name.first_name:XXX

    如果您是 elasticsearch 新手,请在添加映射之前先尝试一下。动态默认值应该会起作用,一切都会奏效。然后,您添加映射以获得对字段行为的细粒度控制。

    【讨论】:

    • 感谢您的回复。多少字段是太多字段?问题是我有近 500 个字段。并非所有字段都有值。与其显式映射所有这些字段,不如只考虑文档的动态特性?
    • 抱歉延迟回复。有了这么多字段,您最好使用动态模板:elasticsearch.org/guide/en/elasticsearch/reference/current/… 以确保每个字段都获得正确的行为。此外,如果要跨越所有数据,您可能希望使用 _all 字段来查询单个字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多