Elasticsearch 中的多字段、多类型搜索
Multi-field, multi-type search in Elasticsearch
我有两种类型 Author
和 Book
。我想从字段 Author.name
和 Book.title
中搜索两种类型和 return 匹配项。我将如何完成此查询?
GET /bookstore/author,book/_search
...
根据您要实现的目标,有几种方法。
- 您可以对数据建模,以便您
将作者的索引值存储在书籍类型中,并且可能是
引用该作者。
- 否则你应该可以查询2种类型,但是你不能
指定要在哪种类型中搜索哪个值。这些会
技术上是 2 个单独的查询,你必须混合使用 2
如果这是你想要的,你自己就会得到结果。
如果这本书没有属性 "name",并且作者没有属性 "title",则可以同时搜索两者。如果您搜索一个不存在的字段,elasticsearch 仍然会尝试,因为模型中的数据是无模式的,并且映射只是定义如何索引字段,但不一定定义文档的结构。
如果您尝试对书籍和作者进行一次搜索,那么我建议您进行 2 个单独的查询,因为您将获得 2 种不同类型的文档,可能需要相应地进行处理。
您可以对索引进行查询,而不仅仅是类型:/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
我有两种类型 Author
和 Book
。我想从字段 Author.name
和 Book.title
中搜索两种类型和 return 匹配项。我将如何完成此查询?
GET /bookstore/author,book/_search
...
根据您要实现的目标,有几种方法。
- 您可以对数据建模,以便您 将作者的索引值存储在书籍类型中,并且可能是 引用该作者。
- 否则你应该可以查询2种类型,但是你不能 指定要在哪种类型中搜索哪个值。这些会 技术上是 2 个单独的查询,你必须混合使用 2 如果这是你想要的,你自己就会得到结果。
如果这本书没有属性 "name",并且作者没有属性 "title",则可以同时搜索两者。如果您搜索一个不存在的字段,elasticsearch 仍然会尝试,因为模型中的数据是无模式的,并且映射只是定义如何索引字段,但不一定定义文档的结构。
如果您尝试对书籍和作者进行一次搜索,那么我建议您进行 2 个单独的查询,因为您将获得 2 种不同类型的文档,可能需要相应地进行处理。
您可以对索引进行查询,而不仅仅是类型:/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