Elasticsearch中的多字段,多类型搜索

时间:2015-03-10 21:18:49

标签: elasticsearch

我有两种类型AuthorBook。我想搜索两种类型并返回字段Author.nameBook.title中的匹配项。我该如何完成此查询?

GET /bookstore/author,book/_search ...

2 个答案:

答案 0 :(得分:5)

您可以查询索引,而不仅仅是类型:/ yourindex / _search。

现在,您应该使用多重匹配查询来更好地控制结果:

{ 
    "multi_match" : { 
        "query": "Will Smith", "fields": [
            "type1.title", "type2.name" 
        ]  
    } 
}

更多信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html

答案 1 :(得分:1)

根据您要完成的任务,有一些方法。

  1. 您可以为您建模数据 在书籍类型中存储作者的索引值,可能还有 提及该作者。
  2. 否则你应该可以查询2种类型,但不能 指定要在哪种类型中搜索的值。这些会 技术上是两个单独的查询,你必须混合2 如果这就是你想要的结果,那就是你自己。
  3. 如果书中没有属性“name”,并且作者没有属性“title”,则可以搜索。如果搜索不存在的字段,弹性搜索仍然会尝试模型中的数据是无模式的,并且映射只是定义如何索引字段,但不一定定义文档的结构。

    如果您尝试对图书和作者进行单一搜索,那么我建议您进行2次单独查询,因为您将获得2种不同类型的文档,这些文档可能需要相应处理。