我对Elasticsearch DSL有疑问。
我想进行全文搜索,但将可搜索的记录范围限定为特定的数据库ID数组。
在SQL世界中,它的功能相当于WHERE id IN(1, 2, 3, 4)
。
我一直在研究,但我发现Elasticsearch查询DSL文档有点神秘,缺乏有用的例子。有人能指出我正确的方向吗?
答案 0 :(得分:2)
这是一个可能适合您的示例查询。这假定您的索引上启用了_all
字段(这是默认值)。它将对索引中的所有字段进行全文搜索。此外,使用添加的ids
过滤器,查询将排除ID不在给定数组中的任何文档。
{
"bool": {
"must": {
"match": {
"_all": "your search text"
}
},
"filter": {
"ids": {
"values": ["1","2","3","4"]
}
}
}
}
希望这有帮助!
答案 1 :(得分:1)
正如 Ali Beyad 所讨论的,查询中的 ids 字段可以为您做到这一点。为了补充他的回答,我举了一个有效的例子。以防将来有人需要它。
GET index_name/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"field": "your query"
}
},
{
"ids" : {
"values" : ["0aRM6ngBFlDmSSLpu_J4", "0qRM6ngBFlDmSSLpu_J4"]
}
}
]
}
}
}
答案 2 :(得分:0)
您可以在MUST子句中创建包含Ids查询的bool查询: https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-ids-query.html
通过在bool查询中使用MUST子句,您的搜索将受到您指定的ID的进一步限制。我在这里假设您是指文件的_id值。
答案 3 :(得分:0)
根据es doc,您可以
<块引用>根据文档的 ID 返回文档。
GET /_search
{
"query": {
"ids" : {
"values" : ["1", "4", "100"]
}
}
}
答案 4 :(得分:0)
使用elasticaBundle symfony 5.2
$query = new Query();
$IdsQuery = new Query\Ids();
$IdsQuery->setIds($id);
$query->setQuery($IdsQuery);
$this->finder->find($query, $limit);