Im с помощью 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 }
Я хочу фильтровать города, штата и почтовый индекс вложенного 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 результатов, я не знаю, если синтаксис businessAddress.city будет обрабатываться автоматически расслоением или я необходимо создать вложенный запрос. В случае, если это вложенный запрос, как я могу его построить?
EDIT
После некоторых комментариев ниже я замечаю я садился термин матча как массив, теперь я изменяю от:
$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 здесь {{query}: {"bool": {"must": [{"match": {"businessAddress.city": {"query": ["NY"], "analyzer": " custom_analyzer "}}}]}}} – bitgandtter
Этот запрос не работал в elasticsearch напрямую. Запрос соответствия не поддерживает значение массива во время поиска. Вы можете проверить свой ответ на ваш запрос? Неужели Elastica вернула ошибку? – hkulekci