【问题标题】:Search result in Symfony project with Elasticsearch使用 Elasticsearch 在 Symfony 项目中搜索结果
【发布时间】:2019-09-08 21:53:00
【问题描述】:

问题:

我有以下问题。我可以使用 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 个数组。

【问题讨论】:

    标签: php symfony elasticsearch elastica foselasticabundle


    【解决方案1】:

    您需要设置查询类型:

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

    如果这不起作用:

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

    解释:

    most_fields 类型在查询多个字段时最有用 包含以不同方式分析的相同文本

    查看更多详情here

    【讨论】:

    • 这仍然给了我多个结果,这不是我的想法。它应该返回 1 个结果,因为 sku 和经销商只匹配 1 个经销商。
    • 添加 $query->setOperator(self::OPERATOR_AND);
    • 感谢您迄今为止的回复和帮助。但这并不是预期的结果。 SKU & Distributor 是数据库中的两个不同的列,如果我没记错的话,不可能用两个查询搜索这两个字段。
    猜你喜欢
    • 2012-08-30
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多