当前位置: 首页 > 面试题库 >

Elasticsearch:无法在多个字段上进行过滤

廖永长
2023-03-14
问题内容

我想{ "query" : { "match_all" :{}}}对elasticsearch 进行过滤,但我不知道…

这是我发送给ES _search方法的内容。

curl -XGET http://localhost:9200/users/location/_search '-H Accept: application/json' '-H Content-Type: application/json'
-d '{
   "query":{
      "match_all":{}
   },
   "filter":{
      "and":{
         "geo_distance":{
            "distance":"500km",
            "location":{
               "lat":48.8,
               "lon":2.33
            }
         },
         "term":{
            "status":1
         }
      }
   },
   "sort":[
      {
         "_geo_distance":{
            "location":[
               2.33,
               48.8
            ],
            "order":"asc",
            "unit":"km"
         }
      }
   ]
}'

但是我总是会收到这个错误:

nested: QueryParsingException[[users] [and] filter does not support [distance]]

而且,如果我删除该"and" :{}选项并仅对geo_distance进行过滤,则可以使用…任何帮助都将是极好的。

干杯


问题答案:

我认为您的and过滤器写有误。该错误表明and过滤器或多或少地在参数方面遇到问题。参见http://www.elasticsearch.org/guide/reference/query-
dsl/and-filter/

尝试以下方法:

{
   "query":{
      "match_all":{}
   },
   "filter":{
      "and": [
         {
             "geo_distance": {
                "distance":"500km",
                "location":{
                   "lat":48.8,
                   "lon":2.33
                }
             }
         }, {
             "term": {
                "status":1
             }
         }]
      }
   },
   "sort":[
      {
         "_geo_distance":{
            "location":[
               2.33,
               48.8
            ],
            "order":"asc",
            "unit":"km"
         }
      }
   ]
}


 类似资料:
  • 我有一个文档索引。我想过滤公共文档或由我的组成员(用户1和3)共享给组的文档。 隐私="公共"或(1,3)中的隐私="组"和user_id) 我可以分开做,但是如何将它们与OR结合起来? 文件: {“id”:1,“user_id”:1, “隐私”:“公共”,“标题”:“为一个人做饭”,} {“id”:3,“user_id”:1, “隐私”:“组”,“标题”:“三的公司”} {“id”:4,“use

  • 问题内容: 我有一个类似以下设置和映射的索引; 我正在努力实现现场通配符搜索的实现。我的示例数据如下: 当我执行以下查询时; 它返回,。我认为,它仍然标记数据。它只能返回。 您能帮上忙吗? 提前致谢 问题答案: 我的解决方案历险记 如您在我的问题中所见,我已经开始审理案件。每当我更改了一部分设置后,一部分便开始工作,而另一部分则停止工作。让我给出我的解决方案历史记录: 1.) 我已将数据索引为默认

  • 问题内容: 我为此感到挣扎,我觉得应该可以,但是也许我在做一些愚蠢的事情。搜索: 返回Source1和Source2的数据。在下面添加术语搜索,我希望返回仅包含Source1s的第一次搜索的子集。使用第一个查询或单独运行时,不返回任何内容。 我知道很难看到这些文档,但是可以说“ Element.sourceSystem.name”存在并且可以使用,因为第一个搜索可以正常工作-非常感谢所有输入。 问

  • 问题内容: 我发现的唯一接近的事情是:Elasticsearch中的多个分组方式 基本上,我试图获得与以下查询等效的ES : 年龄和性别本身很容易获得: 这使: 但是现在我需要这样的东西: 请注意,这是针对年龄范围的“映射”,因此它们实际上表示的是:)而不是数字。例如,性别[1](“男性”)细分为[246]的年龄范围[0](“18岁以下”)。 问题答案: 由于您只有2个字段,因此一种简单的方法是使

  • 问题内容: 假设我有一个小型数据库,其中包含三列:“ id1”,“ id2”和“ date”。我在字段“ id1”上建立数据库索引,因为它是一个经常选择的字段(许多选择查询都使用ex来运行:其中“ id1” = 125548)。 在某些特定的查询中,我需要根据未建立索引的表中的“日期”字段对用户的记录进行排序。我的好奇心是如果对日期进行排序操作(基本上是按订单执行的操作)字段将在整个数据库上运行,