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": {
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”设置了所有嵌套字段。我在这里做了一个测试,如果我使用“嵌套”(显然我必须重新索引我的文档),我就可以得到想要的结果,而不必更改我的搜索查询,这正是我基本上想要的。有关进一步详情:
但我必须承认,重新创建索引和重新编制数据索引是一种我也不太喜欢的方法。你也可以这样做:这对我不起作用。因为我需要进行全文搜索。这就是为什么我用查询来代替这个术语。至于你的第二个答案,我一直在试图避免像这样的嵌套搜索,因为对我搜索的每种类型使用“嵌套”+“路径”是不好的。