我试图在一个包含多个单词的字段上做一个简单的facet请求(例如:'Name1 Name2',有时里面有点和逗号),但我得到的是...
"terms" : [{
"term" : "Name1",
"count" : 15
},
{
"term" : "Name2",
"count" : 15
}]因此,我的字段值由空格拆分,然后运行facet请求...
查询示例:
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
}
}
}
}'发布于 2012-09-12 11:16:47
首先,从实用的角度来看,javanna提供了一个非常好的答案。但是,为了完整起见,我想提一下,在某些情况下,有一种方法可以在不重新索引数据的情况下做到这一点。
如果存储了speciesName字段,并且查询生成的结果数量相对较少,则可以使用script_field检索存储的字段值:
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从源中检索字段值:
......
"script_field": "_source['\''speciesName'\'']",
......同样,结果列表中每个记录的源都将被检索和解析,因此您可能需要一些耐心来对大量记录运行此查询。
发布于 2012-09-12 02:17:51
您的字段不应该被分析,或者至少不应该被标记化。如果您希望在不对字段进行标记化的情况下对字段进行索引,则需要更新映射,然后重新建立索引。
https://stackoverflow.com/questions/12371738
复制相似问题