Результат поиска в проекте Symfony с Elasticsearch - PullRequest
0 голосов
/ 18 апреля 2019

Проблема:

У меня следующая проблема. Я могу искать свои данные с помощью SKU. Но так как есть несколько дистрибьюторов, я хочу отфильтровать их по SKU и дистрибьютору. Но как я могу это сделать, то, что у меня пока есть

PHP

$finder = $this->getContainer()->get('fos_elastica.finder.product.productstock');
$query = new \Elastica\Query\MultiMatch();
$query->setFields(["sku", "distributor"]);
$query->setQuery('XXXXXX');
$productStock = $finder->find($query);
dump($query);
dump($productStock);exit;

$ query dump:

Elastica\Query\MultiMatch {#900
  #_params: array:2 [
    "fields" => array:2 [
      0 => "sku"
      1 => "distributor"
    ]
    "query" => "XXXXXXXX"
  ]
  #_rawParams: []
}

Запрос Результат:

array:2 [
  0 => AppBundle\Entity\ProductStock {#970
    -id: 16218
    -sku: "XXXXXX"
    -stock: 90
    -price: "11.00"
    -distributor: "XXX"
  }
  1 => AppBundle\Entity\ProductStock {#938
    -id: 54086
    -sku: "XXXXXX"
    -stock: 25
    -priceOverride: "11.00"
    -distributor: "XXX"   
  }
]

Таблица базы данных ProductStock

+---+-----+------+--------+-------+
|id | sku |stock | vendor | price |
+---+-----+------+--------+-------+

Моя цель , чего я хочу достичь, это получить 1 массив из моего результата Elasticsearch, если у SKU и дистрибьютора есть совпадение.

1 Ответ

1 голос
/ 18 апреля 2019

Вам необходимо задать тип запроса:

$query->setType(self::TYPE_BEST_FIELDS);
$query->setOperator(self::OPERATOR_AND);

Если это не работает:

$query->setType(self::TYPE_MOST_FIELDS);

Объяснение:

Тип most_fields наиболее полезен при запросе нескольких полей, которые содержат один и тот же текст, проанализированный по-разному

проверьте подробности здесь

...