【发布时间】:2014-10-21 11:53:23
【问题描述】:
我尝试使用 angularjs 和 elasticsearch 在给定字段上创建一个自动完成功能,例如countryname。它可以包含简单的名称,如“法国”、“西班牙”或“组合名称”,如“塞拉利昂”。
在映射中,该字段为not_analyzed,以防止弹性标记“组合名称”
"COUNTRYNAME" : {"type" : "string", "store" : "yes","index": "not_analyzed" }
我需要查询elasticsearch:
- 使用诸如“countryname:value”之类的内容过滤文档,其中 value 可以包含通配符
- 并对过滤器返回的国家/地区名称进行聚合,(我进行聚合以仅获取不同的数据,计数对我来说没用,也许有更好的解决方案)
我不能在“not_analyzed”字段中使用通配符:
这是我的查询,但“值”变量中的通配符不起作用并且区分大小写:
通配符单独她的工作:
curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
"fields": [
"COUNTRYNAME"
],
"query": {
"query_string": {
"query": "COUNTRYNAME:*"
}
},
"aggs": {
"general": {
"terms": {
"field": "COUNTRYNAME",
"size": 0
}
}
}
}'
但这不起作用(法郎*):
curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
"fields": [
"COUNTRYNAME"
],
"query": {
"query_string": {
"query": "COUNTRYNAME:Franc*"
}
},
"aggs": {
"general": {
"terms": {
"field": "COUNTRYNAME",
"size": 0
}
}
}
}'
我也尝试使用bool must query,但不使用这个 not_analyzed 字段和通配符:
curl -XGET 'local_host:9200/botanic/specimens/_search?size=0' -d '{
"fields": [
"COUNTRYNAME"
],
"query": {
"bool": {
"must": [
{
"match": {
"COUNTRYNAME": "Franc*"
}
}
]
}
},
"aggs": {
"general": {
"terms": {
"field": "COUNTRYNAME",
"size": 0
}
}
}
}'
我错过了什么或做错了什么?我应该将字段analyzed 留在映射中并使用另一个不会将组合名称拆分为令牌的分析器吗??
【问题讨论】:
标签: elasticsearch