gpt4 book ai didi

symfony - 在symfony2上使用 Elasticsearch (FOSElasticaBundle)索引计算的字段

转载 作者:行者123 更新时间:2023-12-02 22:33:33 24 4
gpt4 key购买 nike

我有一个“文章”实体,它与实体“比率”具有一对多的关系。

我的文章已被索引。我想添加该文章的平均费率(以与该文章相关的“费率”实体计算)作为索引,而且我不知道该怎么做,如果要更改新费率,则还必须更新平均费率创建。

用于config.yml中的映射:

indexes:
piy:
client: default
settings:
index:
analysis:
analyzer:
custom_search_analyzer:
type: custom
tokenizer: standard
filter : [standard, lowercase, asciifolding]
custom_index_analyzer:
type: custom
tokenizer: standard
filter : [standard, lowercase, asciifolding, custom_filter]
filter:
custom_filter:
type: edgeNGram
side: front
min_gram: 1
max_gram: 20
types:
article:
mappings:
title : { search_analyzer: custom_search_analyzer, index_analyzer: custom_index_analyzer, type: string }
user:
type : object
properties :
fullName : { search_analyzer: custom_search_analyzer, index_analyzer: custom_index_analyzer, type: string }
persistence:
driver: orm
model: Piy\CoreBundle\Entity\Article
elastica_to_model_transformer:
service: piy.transformers.elastica.article
finder: ~
provider: ~
listener: ~

对于速率实体映射:
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="integer", length=1)
*/
private $value;


/**
* @ORM\ManyToOne(targetEntity="Piy\CoreBundle\Entity\User", inversedBy="articleRates")
*/
public $user;

/**
* @ORM\ManyToOne(targetEntity="Piy\CoreBundle\Entity\Article", inversedBy="rates")
*/
private $article;

最佳答案

通过添加过滤器脚本,我找到了一种方法:

$rateFilter = new \Elastica\Filter\Script("sum=0; foreach( rate : doc['value'].values) { sum = sum + rate }; avg = sum/doc['value'].values.length; avg >= ".$searchRate.";  ");

但是现在我还有另一个问题:当我在文章上添加新费率时,它没有添加到索引中...

编辑:
要在添加或更新费率时更新文章父项,我在postPersist和postUpdate上添加了费率侦听器,以启动文章的postUpdate并更新索引

关于symfony - 在symfony2上使用 Elasticsearch (FOSElasticaBundle)索引计算的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23659631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com