Я пытаюсь сделать функцию автозаполнения с угловыми и elasticsearch в заданном поле, например countryname
. он может содержать простые имена, такие как "Франция", "Испания" или "составленные имена", такие как "Сьерра-Леоне".
В отображении это поле not_analyzed
, чтобы предотвратить эластичность, чтобы токенизировать "сложенные имена"
"COUNTRYNAME" : {"type" : "string", "store" : "yes","index": "not_analyzed" }
Мне нужно запросить elasticsearch:
- чтобы отфильтровать документ с чем-то вроде "countryname: 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
}
}
}
}'
но это не работает (franc *):
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
, но не работаю с этим не_аналитическим полем и подстановочным знаком:
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
в отображении и использовать другой анализатор, который не разбивает скомпонованное имя на токен??