elasticsearch,Lucene,elasticsearch" /> elasticsearch,Lucene,elasticsearch" />

Lucene 如何在elasticsearch中使用查询字符串语法搜索这组字段

Lucene 如何在elasticsearch中使用查询字符串语法搜索这组字段,lucene,elasticsearch,Lucene,elasticsearch,可能是我创建的索引错误,但我有一个包含变量字段名的lead索引,需要搜索。我创建了一个名为fields的子对象,其中包含名称和值。样本: [ { "name": "first_name", "value": "XXX" }, { "name": "last_name", "value": "XXX" }, { "name": "email", "value": "X0@yahoo.com" }, { "name"

可能是我创建的索引错误,但我有一个包含变量字段名的lead索引,需要搜索。我创建了一个名为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"
  }
]
名称
字段为
未分析
字段为
已分析
未分析,如.exact and.search

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

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

但它不像我想的那样工作。我想这是因为我正试图将其作为mysql而不是nosql使用,我必须进行一次根本性的大脑转换。

虽然您所采取的方法可能需要付出足够的努力,但您最好为所有内容使用显式字段名,例如: { “姓名、名”:“XXX”, “姓名”:“XXX”, 等 }

然后您的查询字符串如下所示: 姓名:XXX


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

谢谢你的回复。多少字段是太多字段?问题是我有近500个字段。并不是所有字段都有值。与其显式地映射所有这些字段,我是否最好只考虑文档的动态特性?很抱歉延迟了响应。对于这么多的字段,最好使用动态模板:确保每个字段都有正确的行为。此外,如果要跨越所有数据,您可能需要利用_all字段来查询单个字段。