2016-01-20 15 views
0

我有一个关于Elasticsearch DSL的问题。范围Elasticsearch针对特定Ids的结果

我想做一个全文搜索,但将可搜索记录的范围扩展到特定数据库ID的数组。

在SQL世界中,它的功能等同于WHERE id IN(1, 2, 3, 4)

我一直在研究,但我发现Elasticsearch查询DSL文档有点神秘,缺乏有用的例子。任何人都可以将我指向正确的方向吗?

回答

1

这是一个示例查询,它可能适用于您。这假设_all字段已在您的索引上启用(这是默认值)。它会在索引中的所有字段中进行全文搜索。此外,通过添加ids筛选器,该查询将排除其ID不在给定数组中的任何文档。

{ 
    "bool": { 
    "must": { 
     "match": { 
     "_all": "your search text" 
     } 
    }, 
    "filter": { 
     "ids": { 
     "values": ["1","2","3","4"] 
     } 
    } 
    } 
} 

希望这会有所帮助!

+0

谢谢布鲁克!这正是我所期待的。语法的细微差别非常有帮助。非常感谢。 – mindtonic

+0

不客气,很高兴提供帮助。与ES玩得开心! – BrookeB

+0

是的,它非常强大。我绝对喜欢它,只需要一点点帮助导航语法。再次感谢! – mindtonic

0

您可以创建一个包含必须的第一个IDS查询布尔查询: https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-ids-query.html

通过在布尔查询使用MUST条款,您的搜索将进一步通过您指定的ID限制。我在这里假设您是指您的文档的_id值。

+0

Ali Beyad,谢谢你的回复!你会提供一个查询json的样子吗?我想对所有索引字段进行全文搜索并包含MUST子句,但是我所尝试的所有内容都会导致语法错误,并且我无法在任何地方找到一个很好的书面示例。 – mindtonic

+0

@mindtonic:所以你想同时请求全文搜索和id搜索? – gfd