首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch在facets中按空间拆分

elasticsearch在facets中按空间拆分
EN

Stack Overflow用户
提问于 2012-09-11 22:13:26
回答 2查看 2.2K关注 0票数 1

我试图在一个包含多个单词的字段上做一个简单的facet请求(例如:'Name1 Name2',有时里面有点和逗号),但我得到的是...

代码语言:javascript
复制
 "terms" : [{
    "term" : "Name1",
    "count" : 15
},
{
    "term" : "Name2",
    "count" : 15
}]

因此,我的字段值由空格拆分,然后运行facet请求...

查询示例:

代码语言:javascript
复制
curl -XGET http://my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d '{
  "query": {
    "query_string": {
      "fields": [
        "dataset"
      ],
      "query": "2",
      "default_operator": "AND"
    }
  },
  "facets": {
    "test": {
      "terms": {
        "field": [
          "speciesName"
        ],
        "size": 50000
      }
    }
  }
}'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-12 11:16:47

首先,从实用的角度来看,javanna提供了一个非常好的答案。但是,为了完整起见,我想提一下,在某些情况下,有一种方法可以在不重新索引数据的情况下做到这一点。

如果存储了speciesName字段,并且查询生成的结果数量相对较少,则可以使用script_field检索存储的字段值:

代码语言:javascript
复制
curl -XGET http://my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d '{
  "query": {
    "query_string": {
      "fields": ["dataset"],
      "query": "2",
      "default_operator": "AND"
    }
  },
  "facets": {
    "test": {
      "terms": {
        "script_field": "_fields['\''speciesName'\''].value",
        "size": 50000
      }
    }
  }
}
'

该查询的结果是,elasticsearch将检索结果集中每条记录的speciesName字段,并根据这些值构造facet。不用说,如果您的结果集包含数百万条记录,则此查询的性能可能会很慢。

类似地,如果字段未存储,但记录源已存储,则可以使用script_field facet从源中检索字段值:

代码语言:javascript
复制
......
"script_field": "_source['\''speciesName'\'']",
......

同样,结果列表中每个记录的源都将被检索和解析,因此您可能需要一些耐心来对大量记录运行此查询。

票数 4
EN

Stack Overflow用户

发布于 2012-09-12 02:17:51

您的字段不应该被分析,或者至少不应该被标记化。如果您希望在不对字段进行标记化的情况下对字段进行索引,则需要更新映射,然后重新建立索引。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12371738

复制
相关文章

相似问题

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