我使用FOSElasticaBundle將我的symfony3項目與elasticsearch集成。我有一個映射類似於:foselasticabundle嵌套查詢
company:
mappings:
id: { boost: 1, type: string, index: not_analyzed }
cik: { boost: 2, type: string, index: not_analyzed }
conformedName: { boost: 6, analyzer: custom_analyzer }
assignedSIC:
type: object
properties:
id: { type: string, index: not_analyzed }
code: { type: string, index: not_analyzed }
title: { analyzer: custom_analyzer }
businessAddress:
type: object
properties:
street1: { analyzer: custom_analyzer }
street2: { analyzer: custom_analyzer }
city: { analyzer: custom_analyzer }
state: { analyzer: custom_analyzer }
zip: { type: string, index: not_analyzed }
phone: { type: string, index: not_analyzed }
我想按城市,州和zip嵌套的businessAddress屬性過濾。
我有這個疑問:
$boolQuery = new BoolQuery();
$cityQuery = new Match();
$cityQuery->setFieldQuery('businessAddress.city', array($city]));
$cityQuery->setFieldParam('businessAddress.city', 'analyzer', 'custom_analyzer');
$boolQuery->addMust($cityQuery);
$this->finder->find($boolQuery);
JSON查詢作爲
{"query":{"bool":{"must":[{"match":{"businessAddress.city":{"query":["NY"],"analyzer":"custom_analyzer"}}}]}}}
但有0的結果,我不知道,如果sintax businessAddress.city將由束自動處理還是我需要創建一個嵌套查詢。如果這是一個嵌套的查詢如何我可以建立呢?
編輯
一些意見後,下面我發現我設置匹配項的數組,現在我改變來自:
$cityQuery->setFieldQuery('businessAddress.city', array($city]));
到
$cityQuery->setFieldQuery('businessAddress.city', $city]);
導致對JSON查詢:
{"query":{"bool":{"must":[{"match":{"businessAddress.state":{"query":"NY","analyzer":"custom_analyzer"}}}]}}}
我已經通過互聯網查詢,什麼也沒找到。
請幫忙。謝謝
你可以將'$ boolQuery'導出爲json。你可以使用' - > toArray()'方法。這裏 – hkulekci
@hkulekci是{ 「查詢」:{ 「布爾」:{ 「必須」:[{ 「匹配」:{ 「businessAddress.city」:{ 「查詢」: 「NY」], 「分析」:」 custom_analyzer「}}}]}}} – bitgandtter
該查詢直接在elasticsearch中不起作用。匹配查詢在搜索時不支持數組值。你能檢查你的查詢的錯誤迴應嗎? Elastica是否返回任何錯誤? – hkulekci