elasticsearch,elastica,foselasticabundle,Php,Symfony,elasticsearch,Elastica,Foselasticabundle" /> elasticsearch,elastica,foselasticabundle,Php,Symfony,elasticsearch,Elastica,Foselasticabundle" />

Php 使用Elasticsearch在Symfony项目中搜索结果

Php 使用Elasticsearch在Symfony项目中搜索结果,php,symfony,elasticsearch,elastica,foselasticabundle,Php,Symfony,elasticsearch,Elastica,Foselasticabundle,问题: 我有以下问题。我可以用SKU搜索我的数据。但由于有多个分销商,我想筛选SKU和分销商。但我该怎么做呢,到目前为止我所拥有的是 PHP $finder = $this->getContainer()->get('fos_elastica.finder.product.productstock'); $query = new \Elastica\Query\MultiMatch(); $query->setFields(["sku", "distributor"]); $q

问题:

我有以下问题。我可以用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转储:

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 |
+---+-----+------+--------+-------+

我的目标我想实现的是,如果SKU和分销商匹配,则从Elasticsearch结果中获取1个数组。

您需要设置查询类型:

$query->setType(self::TYPE_BEST_FIELDS);
$query->setOperator(self::OPERATOR_AND);
如果这不起作用:

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

most_字段类型在查询多个 包含以不同方式分析的相同文本


查看更多详细信息

这仍然会给我提供多个结果,这不是我的想法。它应该返回1个结果,因为sku和分发服务器只匹配1个分发服务器。添加$query->setOperator(self::OPERATOR\u and);感谢您迄今为止的回复和帮助。但这并不是预期的结果。SKU和Distributor是数据库中的两个不同列,如果我没有弄错的话,就不可能用两个查询同时搜索这两个字段。