【问题标题】:find distinct record values for a field from elastic search query instead of count of distinct从弹性搜索查询中查找字段的不同记录值,而不是不同的计数
【发布时间】:2018-01-11 09:38:30
【问题描述】:

我需要弹性搜索查询中的不同记录,就像我们在数据库中所做的那样

select distinct(title) from tablename

而不是

select count(distinct(title)) from tablename

我使用了聚合,但它不能解决我的问题,因为它只给出 count ,我需要一些搜索过滤器或其他任何能给我这样的结果的东西, 如果我有 3 条记录:

id   title    
1    ab is
2    sdf sdf
3    ab is

然后我从查询中获取它给我的输出为:

hits : [
   1 : ab is
   2 : sdf sdf
]

我申请的查询是

{ "query": {
    "match" : {"title" : "sing alongs"}
  },
 "from": 0,
 "aggs": {
   "genres": {
     "terms": {
       "field": "title"
      }
    }
 },
 "size": 30,
 "_source": [  
   "title"   
 ]}

我得到的结果是

{
{
  "_index": "events",
  "_type": "Activity",
  "_id": "F-m5MGABRY8M87iCVeBZ",
  "_score": 21.652287,
  "_source": {
  "title": "Sing Alongs"
}
} ,
{
  "_index": "events",
  "_type": "Activity",
  "_id": "6OuBwmABRY8M87iCPxNh",
  "_score": 9.333357,
  "_source": {
    "title": "Sing Along"
  }
},
{
  "_index": "events",
  "_type": "Activity",
  "_id": "Q-mEIWABRY8M87iC7Ytl",
  "_score": 9.320941,
  "_source": {
    "title": "Sing-Through"
  }
}

}

带标题的记录

一起唱歌

这里应该只出现一次

【问题讨论】:

    标签: elasticsearch full-text-search


    【解决方案1】:

    使用大小=1。我不认识您的查询语言或您工作的环境,但这里是在查询中使用“大小”的文档:
    https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html

    【讨论】:

    • 如果我使用 size = 1 ,它只会给出 1 条记录,我需要一个提供所有记录的解决方案,但具有相同标题的记录应该只显示一次,而不是重复显示,就像我们得到结果一样通过 db 查询,从 table_name 中选择 distinct(title)
    • 我不明白你在做什么,你能举一个输入和预期输出的例子吗?我的意思是你需要什么?整个记录,还是只是一个字段?我也没有太多的 sql 经验,我不确定我会理解这些例子。并请显示您当前的查询
    • 我已经为你更新了我的问题,请再次阅读问题。
    • 我确实读过它并且我更接近了,但你没有告诉我你是否只需要那个字段(暗示你在不同的设置中有多个字段),或者你需要第一条记录(通过某种排序)每个标题。
    • 实际上我在elastic-search中添加数据时错误地将一些记录添加了两次甚至三次,有些记录添加了两次,有些记录添加了三次,如果记录存在两次或三次,我需要获取它一次是否获取第一次出现或最后一次或随机的
    猜你喜欢
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多