gpt4 book ai didi

elasticsearch - Elasticsearch过滤查询的部分字段名称

转载 作者:行者123 更新时间:2023-12-03 01:58:20 26 4
gpt4 key购买 nike

是否可以仅使用字段的部分路径(而不是完全限定的路径)对 Elasticsearch 进行过滤查询。

例如,我的映射如下所示:

{
"library" : {
"properties":{
"name" : {
"type":"string"
},
"address" : {
"properties":{
"city" : {
"type":"string"
}
}
}
}
}
}

如果我对“名称”字段或“libary.name”字段(具有有效值)进行过滤查询,则会按预期返回结果。但是,如果我对'address.city'或'city'进行了过滤查询,则不会得到任何结果。我必须将标签命名为“library.address.city”。

我找不到任何解释此行为的文档。有什么建议可以使我的过滤查询适用于“address.city”,类似于其已针对“name”起作用的建议吗?

这有效
{
"query": {
"filtered": {
"query": {
"term": {
"name" : "xyz"
}
}
}
}
}

这不起作用(或改为“address.city”)
 {
"query": {
"filtered": {
"query": {
"term": {
"city" : "xyz"
}
}
}
}
}

谢谢!

最佳答案

这可能是由于term query所致,它正在寻找完全匹配。您正在使用object datatype,并且应该能够使用address.city访问城市字段。

我用您的映射创建了索引,

PUT ob_index
{
"mappings": {
"library": {
"properties": {
"name": {
"type": "string"
},
"address": {
"properties": {
"city": {
"type": "string"
}
}
}
}
}
}
}

然后插入文件
PUT ob_index/library/11
{
"name" : "Tesla",
"address" : {
"city" : "orlando"
}
}

您可以使用 address.city查询城市字段。
GET ob_index/_search
{
"query": {
"filtered": {
"query": {
"term": {
"address.city": {
"value": "orlando"
}
}
}
}
}
}

现在,如果您将Orlando替换为Orlando,那么它将不匹配。您可能想使用 match query,因为您的字段是 analyzedMore分析。

您还可以使用 query string query并将 wildcard用于字段
GET ob_index/_search
{
"query": {
"query_string": {
"fields": ["address*"],
"query": "orlando"
}
}
}

这将搜索地址对象内的所有内容

希望这可以帮助!

关于elasticsearch - Elasticsearch过滤查询的部分字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35050465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com