ElasticSearch中的简单全文搜索

时间:2013-04-20 11:58:09

标签: lucene elasticsearch

我正在尝试了解ElasticSearch Query DSL的工作原理。 如果有人能给我一个如何执行搜索的例子,那将会有很多帮助:

SELECT * FROM products 
WHERE shop_id = 1 
AND MATCH(title, description) AGAINST ('test' IN BOOLEAN MODE)

1 个答案:

答案 0 :(得分:3)

假设您索引了一些至少包含shop_id,title和description字段的文档,如下例所示:

{
    "shop_id" : "here goes your shop_id",
    "title" : "here goes your title",
    "description" : "here goes your description"
}

您可以针对多个字段执行multi match query,并为它们赋予不同的权重(通常标题更重要)。您还可以将查询与shop_id上的term filter结合使用:

{
    "query" : {
        "multi_match" : {
        "query" : "here goes your query",
        "fields" : [ "title^2", "description" ]
    },
    "filter" : {
        "term" : { "shop_id" : "here goes your shop id" }
    }
}

您需要使用search API提交查询。过滤器用于减少查询执行的文档集。过滤器更快,因为不涉及评分和缓存。在我的示例中,我应用了top level filter,这可能适合或不适合您,具体取决于您接下来要做什么。例如,如果要创建构面,则会在构面中忽略过滤器。添加过滤器的另一种方法是在计算构面时考虑的因素是filtered query