2014-09-23 80 views
0

我很难得到这个弹性搜索查询合作。我目前正在尝试使用Bool Query来获取精确和分析/全文搜索的结果。ElasticSearch混合查询类型

我似乎不能,什么都原因,使用布尔查询中match过滤器:

{ 
    "bool":{ 
     "should":[ 
     "match":{"mainInfo.states": "Wisconsin"}, 
     "match":{"mainInfo.cities": "WI"} 
     ] 
    } 
} 

这将引发一个解析错误,告诉我那场比赛不是一个查询类型。

我需要能够在也有词条过滤器的布尔查询中进行全文搜索。所以基本上我想有一个查询有点像这样:

{ 
    "bool":{ 
     "must":[ 
     "term":{"mainInfo.clientId":"123456"} 
     ], 
     "should":[ 
     "match":{"mainInfo.states": "Wisconsin"}, 
     "match":{"mainInfo.cities": "WI"} 
     ] 
    } 
} 

我在哪里可以有1个或2个学期该必须存在,并在他们的2应该存在几个全文搜索。

我还使用function_score查询来返回随机,可分页结果使用random_seed

我的问题是,我无法获取全文查询在我的布尔查询中运行。似乎只有term过滤器工作。另外,当我把match查询放在bool查询之外时,似乎匹配查询可以工作,或者bool查询可以工作,但从来都不是。

我似乎无法形成一个匹配几个term查询和几个匹配查询的查询。 term必须存在,其中match应该存在(所以至少匹配其中一个过滤器)。

我绝不是一个elasticsearch专家,当你在寻找更复杂的查询信息时,文档看起来很模糊。

如果任何人都可以借用一个例子来说明如何以这种方式进行查询,那将不胜感激。但是,请不要将我链接到Bool Queries或任何其他ElasticSearch文档的文档。我向你保证我已经彻底读过它们,并且我已经尝试了许多不同的方法来执行这个查询,但没有一个似乎有预期的行为。

我使用ElasticSearch 1.3.2

回答

2

我似乎不能,什么永远原因,使用布尔查询中匹配滤波器:

查询的语法不正确,如果你有多个条款每个条款应被包裹在自己的对象:

{ 
    "query":{ 
    "custom_filters_score":{ 
     "query":{ 
     "nested":{ 
      "path":"mainInfo", 
      "query":{ 
      "bool":{ 
       "should":[ 
       { 
        "match":{ 
        "mainInfo.states":"WI" 
        } 
       }, 
       { 
        "match":{ 
        "mainInfo.cities":"Wisconsin" 
        } 
       } 
       ] 
      } 
      } 
     } 
     }, 
     "filters":[{ 
     "term":{ 
      "mainInfo.clientId":"123456" 
     }, 
     "script":"yourscriptgoeshere" 
     }] 
    } 
    } 
} 
+0

看来我只得到'clientId',或这些曾经在过去的对象来。我似乎得到了术语或匹配查询的结果,但从来都没有。 我觉得这是使用“function_score”查询的结果 – tsturzl 2014-09-23 09:33:08

+0

您可以发布您的映射示例吗? – 2014-09-23 10:30:36

+0

你使用嵌套类型吗? – 2014-09-23 11:15:50