首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch查询以跨索引搜索geo数据和非geo数据?

Elasticsearch查询以跨索引搜索geo数据和非geo数据?
EN

Stack Overflow用户
提问于 2017-04-21 21:14:26
回答 1查看 93关注 0票数 0

我有两个索引,businessescategories。每个映射都有不同的映射,其中一个不同之处是businesses有一个与之相关的geofield (lat/lng)。我想要执行一个查询,用户可以在其中执行跨越这两个索引的自动完成搜索(比如Yelp.com)。此外,将提供用户的位置,以便只有businesses在一定的x距离将出现。但是,任何匹配搜索的categories都应该出现,因为当返回categories时,用户的位置并不重要。因为我没有将categories与geofield相关联,所以我得到一个无法找到geofield属性的错误,这是正确的(当我只是查询businesses时,它可以工作)。是否有一种方法来构造我的查询,使一个语句只查看一个索引,而一个语句只查看另一个索引?或者,我是否需要通过添加type属性和为"type":"category"使用or运算符来给类别提供一些将被忽略的“虚拟”geofield?也就是说,“匹配geoquery OR is type:category”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-21 21:46:27

如果我理解您想要做的事情,可以将其重新表述为布尔表达式,例如:

代码语言:javascript
复制
("index == businesses" AND "<geoquery> is OK") OR ("index == categories" AND "<categoryquery> is OK")

以下是实现此查询的几个提示:

  • 您必须在映射“类别”索引(不一定在“类别”索引的json文档中)中定义geopoint字段。

您没有提供地理查询和分类查询,所以我让它们作为占位符,您只需替换它们。

您应该尝试这样的方法(ElasticSearchv5.2.2语法,也应该在ElasticSearchv2.0中工作):

代码语言:javascript
复制
GET businesses,categories/_search
{
    "query": {
        "bool": {
            "minimum_should_match": 1,
            "should": [{
                    "bool": {
                        "must": [
                            {
                                "term": {
                                    "_index": "businesses"
                                }
                            },
                            {
                                "<your_geoip_query>": {
                                    <your_geoip_query_params>
                                }
                            }
                        ]
                    }
                },
                {
                    "bool": {
                        "must": [
                            {
                                "term": {
                                    "_index": "categories"
                                }
                            },
                            {
                                "<your_category_query>": {
                                    <your_category_query_params>
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43552126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档