如何仅在查询属性中指定某些字段

时间:2015-05-28 15:27:38

标签: elasticsearch

我正在使用一个将请求包装到Elastic Search的服务。此服务仅允许我将query属性发送到Elastic Search。我想告诉Elastic Search只查找文档中某个字段的匹配项。

例如,如果这是我的文件:

{
  name: 'foo',
  value: 'true'
}

然后我想告诉Elastic Search只查找name等于foo的文档。

弹性搜索documentation说要使用fields属性执行此操作,如下所示:

{
  "multi_match" : {
    "query" : "this is a test",
    "fields" : [ "subject^3", "message" ] 
  }
}

但我只能访问query属性,因此我无法指定fields。在页面下方的best fields下面,它表示这相当于+first_name:will +first_name:smith。但是当我提出这个问题时,它会在值中查找实际匹配+first_name:will +first_name:smith的文本,而不是查找值为first_name的{​​{1}}字段。

是否可以仅使用will属性指定要使用弹性搜索搜索的字段?

2 个答案:

答案 0 :(得分:2)

这听起来像是query_stringhttps://www.elastic.co/guide/en/elasticsearch/reference/1.x/query-dsl-query-string-query.html)的完美匹配。你可以用它做这样的事情:

"query_string" : {
    "query" : "subject:whatever OR message:whatever"
  }

因此,如果您可以将multi_match更改为query_string,那么这就是您要寻找的内容。

答案 1 :(得分:1)

Lucene支持现场数据。执行搜索时,您可以指定字段,也可以使用默认字段。字段名称和默认字段是特定于实现的。

您可以通过键入字段名称后跟冒号“:”来搜索任何字段,然后输入您要查找的字词。

{
    "query": {
        "query_string": {
            "query": "Name:\"foo bar cook\"",
            "default_operator" : "or"
        }
    }
}

使用default_operator并执行AND操作,或在值

之间执行OR操作