elasticsearch - 在 ElasticSearch 中搜索嵌套对象中的所有字段

标签 elasticsearch

假设我有一个如下所示的记录:

{
    "title": "Random title",
    "authors": [
        {
            "first": "Jordan",
            "last": "Reiter"
            … more fields here …
        },
        {
            "first": "Joe",
            "last": "Schmoe"
            … more fields here …
        },
    ] 
}

我希望用户能够按作者搜索记录,如果他们输入完整的查询 Jordan Reiter,它会提取此记录(以及至少一位作者与这些字段匹配的其他记录。

我不希望用户必须指定第一个/最后一个字段,而且我不一定知道他们是否正在搜索 Jordan Reiter Reiter Jordan 甚至J Reiter 因此,理想情况下,我希望匹配所有这些情况,同时仍然对其进行过滤,以便例如这些记录都不匹配:

{
    "title": "About Jordan Reiter",
    "authors": [
        {
            "first": "Susan",
            "last": "Schmusan"
            … more fields here …
        }
    ] 
}


{
    "title": "Completely different authors",
    "authors": [
        {
            "first": "Robert",
            "last": "Jordan"
            … more fields here …
        },
        {
            "first": "Samuel",
            "last": "Reiter"
            … more fields here …
        },
    ] 
}

刚刚开始使用 ElasticSearch,因此如果我缺少任何基本概念,请告诉我。

我计划让作者字段成为嵌套类型。

最佳答案

第一个和最后一个的多重匹配查询,我猜: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html (也许带有phrase_prefix子句) 包装到嵌套查询中: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html

并且您必须提供一个映射来明确指定您的“作者”是嵌套类型: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html

如果您不将作者映射为嵌套类型,则 ElasticSearch 将在内部创建所有“第一个”值的长列表和所有“最后一个”值的长列表,因此您将无法匹配组合特定的“第一个”和“最后一个”字段。

关于elasticsearch - 在 ElasticSearch 中搜索嵌套对象中的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783656/

相关文章:

ruby-on-rails - 无法将Tyre(和ElasticSearch)的混合 boolean 值混合在一起

optimization - 哪些Elasticsearch指标需要优化?

elasticsearch - 仅返回elasticsearch查询中的顶级字段?

java - 在术语查询中具有动态列表值的elasticsearch QueryBuilder

class - 在Elasticsearch Nest中索引动态对象

ruby-on-rails - 通过关联ID的轮胎 Elasticsearch 过滤器

java - Elasticsearch 全局搜索对多个索引的不同过滤器

Elasticsearch 术语过滤器不返回任何结果

Elasticsearch:查询差异中的通配符: "Alex*"与 "*lex*"

elasticsearch - Elasticsearch 高级客户端-如何使用发帖请求进行搜索?