如何在ElasticSearch中使用OR语句在多个字段中进行搜索

时间:2012-03-13 14:09:31

标签: elasticsearch

A有一个字符串,让我们说“Ab Cd”

我的文件包含字段: ['a','b','c','d',...'z'](并非所有文件都包含所有字段)

我只想在字段'a','c','f','x'中搜索,但我想返回文档中的所有字段。

如果任何字段'a','c','f','x'包含以'Ab'或'Cd'开头的字符串,则点击成功。

现在我使用它,但它搜索所有字段而不是选定的字段。

{'query': {'query_string': {'query': "Ab* Cd*"}}}

2 个答案:

答案 0 :(得分:14)

可以指定默认情况下要搜索的字段列表作为查询的一部分:

{ 
    "query": { 
        "query_string" : {
            "fields" : ["a", "c", "f", "x"],
            "query" : "Ab* Cd*"
        } 
    }
}

或者,您可以在每个术语前加上字段名称:

{'query': {'query_string': {'query': "a:Ab* c:Ab* f:Ab* x:Ab* a:Cd* c:Cd* f:Cd* x:Cd*"}}}

检查描述这些和其他有用选项的elasticsearch指南的Query String Query页。

答案 1 :(得分:4)

这正是我想要的。如果有人在寻找这个版本的java版本:

 QueryStringQueryBuilder qsqb = new QueryStringQueryBuilder("Ab* Cd*")
          .field("a", 2)
          .field("b")
          .field("c")
          .field("f")
          .field("x");

如果你想在上面的代码中显示字段“a”,你甚至可以使用字段级别提升。