我正在尝试对包含多个单词的字段执行简单的构面请求(例如:'Name1 Name2',有时内部带点和逗号),但我得到的是......
"terms" : [{
"term" : "Name1",
"count" : 15
},
{
"term" : "Name2",
"count" : 15
}]
所以我的字段值按空格分割,然后运行构面请求...
查询示例:
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
}
}
}
}'
答案 0 :(得分:5)
不应分析您的字段,或至少不进行标记。如果要对字段编制索引而不对其进行标记,则需要更新映射,然后重新编制索引。
答案 1 :(得分:4)
首先,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
字段,它将根据这些值构建构面。毋庸置疑,如果您的结果集包含数百万条记录,则此查询的执行可能会缓慢。
同样,如果未存储该字段,但存储了记录源,则可以使用script_field
facet从源中检索字段值:
......
"script_field": "_source['\''speciesName'\'']",
......
同样,将检索并解析结果列表中每条记录的来源,因此您可能需要一些耐心才能在大量记录上运行此查询。