gpt4 book ai didi

php - 是否可以使用 elasticsearch 提升 'newest' 项目? (FOQElasticaBundle)

转载 作者:IT王子 更新时间:2023-10-28 23:44:30 24 4
gpt4 key购买 nike

我目前正在通过 FOQElasticaBundle 在我的 Symfony2 应用程序中实现 Elasticsearch 到目前为止,基于应用于我的“故事”实体各个领域的提升,它一直运行良好。这是配置:

foq_elastica:
clients:
default: { host: localhost, port: 9200 }

indexes:
website:
client: default
types:
story:
mappings:
title: { boost: 8 }
summary: { boost: 5 }
text: { boost: 3 }
author:
persistence:
driver: orm # orm, mongodb, propel are available
model: Acme\Bundle\StoryBundle\Entity\Story
provider:
query_builder_method: createIsActiveQueryBuilder
listener:
service: acme_story.search_index_listener
finder:

不过,我还想根据故事的“published_at”日期应用提升,这样昨天发布的故事就会出现在 6 个月前发布的故事之前的结果中 - 即使较早的故事有得分略高(显然这需要一些调整)。这可能吗?

如果有人能让我知道如何使用 FOQElasticaBundle 实现这一点,那就太好了,但如果你能让我知道如何直接在 elasticsearch 中实现这一点,我将不胜感激,这样我就可以尝试自己实现该行为,并且如果需要,为 bundle 做出贡献。

谢谢。

最佳答案

哇,经过大量的实验和数小时的 Internet 拖网,我终于设法获得了所需的行为! (全部归功于 Clinton Gormley。)

映射配置:

mappings:
title: { boost: 8 }
summary: { boost: 5 }
text: { boost: 3 }
author:
publishedAt: { type: date }

这是使用 PHP 客户端 Elastica 动态构建查询以使用原始映射和发布日期进行提升的代码:

$query = new \Elastica_Query_Bool();
$query->addMust(new \Elastica_Query_QueryString($queryString));

$ranges = array();
for ($i = 1; $i <= 5; $i++) {
$date = new \DateTime("-$i month");

$currentRange = new \Elastica_Query_Range();
$currentRange->addField('publishedAt', array(
'boost' => (6 - $i),
'gte' => $date->getTimestamp()
));

$ranges[] = $currentRange->toArray();
}

$query->addShould($ranges);

/** @var $pagerfanta Pagerfanta */
$pagerfanta = $this->getFinder()->findPaginated($query);

对于那些对原始 elasticsearch 查询更感兴趣的人(为简洁起见,仅提供 3 个日期范围)...

curl -XPOST 'http://localhost:9200/website/story/_search?pretty=true' -d '
{
"query" : {
"bool" : {
"must" : {
query_string: {
query: "<search term(s)>"
}
},
"should" : [
{
"range" : {
"publishedAt" : {
"boost" : 5,
"gte" : "<1 month ago>"
}
}
},
{
"range" : {
"publishedAt" : {
"boost" : 4,
"gte" : "<2 months ago>"
}
}
},
{
"range" : {
"publishedAt" : {
"boost" : 3,
"gte" : "<3 months ago>"
}
}
}
]
}
}
}'

关于php - 是否可以使用 elasticsearch 提升 'newest' 项目? (FOQElasticaBundle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091365/

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