我目前正在使用FOQElasticaBundle与我的弹性搜索服务器进行交互,但我似乎无法找到一种方法来根据每个实体上的“活动”标志来限制搜索结果。是否可以以某种方式在配置中设置它?这是我当前的配置:
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: Joe\Bundle\StoryBundle\Entity\Story
provider:
listener:
finder:
我不能只在控制器/视图级别排除不活动的故事,因为这会打乱分页 - 我需要每页有一致数量的项目,因此搜索需要过滤掉任何active
错误的故事(或0)。我敢肯定这一定是可能的,但有人知道怎么做。
谢谢。
编辑
在没有query_builder_method
为提供者指定自定义的运气之后,我尝试指定自定义存储库并构建我的查询。但我还不能让它工作。这是我的搜索方法:
public function findByQueryString($queryString)
{
$builder = new \Elastica_Query_Builder();
$builder
->queryString()
->field('query', $queryString)
->queryStringClose()
->filter()
->term()
->field('active', 1)
->termClose()
->filterClose()
;
// TODO check published date...
return $this->findPaginated($builder);
}
这会产生以下 JSON:
{
"query": {
"query_string": {
"query": "story"
},
"filter": {
"term": {
"active": "1"
}
}
},
"from": 0,
"size": 10
}
但出于某种原因,它似乎不喜欢过滤器的“术语”部分。我只是试图模仿elasticsearch 文档中的内容,但我承认我真的不知道我应该做什么!