2012-03-13 68 views
5

搜索有一个字符串,让我们说“死亡CD”如何在多个领域与OR语句在ElasticSearch

我有一个域的文档: [“一”,“B”,“C”,' d',...'z'](并非所有文档都包含所有字段)

我只希望在字段'a','c','f','x'中搜索,但是我想返回所有字段在文件中。

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

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

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

回答

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*"}}} 

检查Query String Query elasticsearch的页面介绍这些和其他有用的选项的指南。

+0

谢谢,这解决了这个问题。 – 2012-03-13 15:02:32

4

这正是我所期待的。万一有人找这方面的一个Java版本:

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

你甚至可以使用现场级的提升,如果你想作为显示领域的“一”,在上面的代码。