elasticsearch 如何使用';字段';?,elasticsearch,elasticsearch" /> elasticsearch 如何使用';字段';?,elasticsearch,elasticsearch" />

elasticsearch 如何使用';字段';?

elasticsearch 如何使用';字段';?,elasticsearch,elasticsearch,我有多个索引,我有一个通过所有这些索引全局执行的搜索 如何让elasticsearch区分类似于article.author.name(其中'article'是类型,'author.name'是嵌套字段)和author.name(其中'author'是类型,'name'是顶级属性)的字段 因此,例如,如果执行此类搜索: curl -X GET 'http://localhost:9200/*/author,article/_search?pretty' -d '{ "query": {

我有多个索引,我有一个通过所有这些索引全局执行的搜索

如何让elasticsearch区分类似于
article.author.name
(其中'article'是类型,'author.name'是嵌套字段)和
author.name
(其中'author'是类型,'name'是顶级属性)的字段

因此,例如,如果执行此类搜索:

curl -X GET 'http://localhost:9200/*/author,article/_search?pretty' -d '{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "tag": "programming"
              }
            }
          ]
        }
      },
      "query": {
        "query_string": {
          "query": "John Doe",
          "fields": ["author.name"]
        }
      }
    }
  }
我只想在
author
type中的
name
字段中进行精确搜索。但不在
article
类型中的
author.name
字段内。那么,如何将查询中的字段名视为“绝对”字段名呢?因为,假设它是一个全局搜索,我想通过被查询的字段来定义搜索的范围


在这种情况下,我不能简单地从查询URI中删除
article
字符串。

您可以使用should而不是bool查询字符串上的must

curl -X GET 'http://localhost:9200/*/author,article/_search?pretty' -d '{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "tag": "programming"
              }
            }
          ]
        }
      },
      "query": {
        "bool": {
          "must": [
                {
                  "term": {
                    "author.name": "John Doe"
                  }
                }
          ]
        }
      }
    }
  }
}'

我发现的一个可能的解决方案是更改索引的映射

令我沮丧的是,我使用“object”类型而不是“nested”设置了所有嵌套字段。我在这里做了一个测试,如果我使用“嵌套”(显然我必须重新索引我的文档),我就可以得到想要的结果,而不必更改我的搜索查询,这正是我基本上想要的。有关进一步详情:


但我必须承认,重新创建索引和重新编制数据索引是一种我也不太喜欢的方法。

你也可以这样做:这对我不起作用。因为我需要进行全文搜索。这就是为什么我用查询来代替这个术语。至于你的第二个答案,我一直在试图避免像这样的嵌套搜索,因为对我搜索的每种类型使用“嵌套”+“路径”是不好的。