如何使用elasticsearch中的query_string语法搜索这组字段

时间:2014-05-02 20:30:02

标签: lucene elasticsearch

可能是我创建了错误的索引,但是我有一个带有可变字段名称的首要索引,我需要搜索。我创建了一个名为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,并且我必须有一个基本的大脑转移。

1 个答案:

答案 0 :(得分:1)

虽然你正在采取的方法可能应该付出足够的努力,但你最好为所有事情都有明确的字段名称,例如: {   “name.first_name”:“XXX”,   “name.last_name”:“XXX”,   等等... }

然后你的query_string看起来像这样: name.first_name:XXX

如果您是弹性搜索的新手,请在添加映射之前解决问题。动态默认值应该启动,事情会起作用。然后,您可以添加映射以对字段行为进行细粒度控制。