【发布时间】:2012-08-18 22:52:49
【问题描述】:
我目前正在通过FOQElasticaBundle 在我的 Symfony2 应用程序中实现弹性搜索,到目前为止,基于应用于我的“故事”实体的各个领域的提升,它一直运行良好。这是配置:
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 中实现这一点,我将不胜感激,这样我就可以自己尝试实现该行为,并且如果需要,请为捆绑包做出贡献。
谢谢。
【问题讨论】:
-
你为什么不修改你的查询,以便你 orderBy published_at?
-
@Patt 谢谢,但您指的是哪个查询?我刚刚订购了 query_builder_method 的结果,但这没有任何效果。然后我尝试将发送到 elasticsearch 的查询更改为以下内容: { "query" : { "query_string" : { "query" : "something" } }, "sort" : [ { "publishedAt" : "desc" } ] }。这导致了错误:“解析失败 [未找到 [publishedAt] 的映射以便排序”。在我的映射配置下添加“publishedAt:”没有帮助。
-
好的,忽略我之前的评论...在将“publishedAt”映射添加到我的配置并运行“app/console foq:elastica:populate”以应用更改后,我能够进行排序到弹性搜索。然而,这并不是我真正想要的 - 这意味着与搜索词的非常部分匹配将出现在可能仅在几秒钟前发布的完全匹配之前。我绝对认为需要根据故事的“新近度”进行某种提升,但这似乎在所有文档中都没有......
标签: php symfony elasticsearch