ElasticSearch edge-ngram не работает
Я настроил свой индекс со следующими параметрами, и результаты запроса matchAll имеют значение "trial" в поле IPRANGE.
Настройки:
{
"settings" : {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 5
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
},
"mappings" : {
"users" : {
"properties" : {
"IPRANGE" : {
"type" : "string",
"analyzer" : "autocomplete"
}
}
}
},
refresh_interval: "1000"
}
Но когда я ищу со следующей полезной нагрузкой, он не возвращает результаты, то есть 0 хитов.
URL:
http://xxxxxx:9200/db2/users/_search
Полезная нагрузка:
{
"query": {
"match": {
"IPRANGE": "tr"
}
}
}
В чем может быть проблема?
1 ответ
Решение
Как вы проиндексировали документ? Вот пример, который работает:
Я изменил отображение так, чтобы autocomplete
анализатор используется для индексации IPRANGE
поле, при поиске по полю будет использоваться анализатор по умолчанию (вы не хотите разделять поисковый термин таким же образом).
/POST http://localhost:9200/test
{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 5
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
},
"mappings": {
"users": {
"properties": {
"IPRANGE": {
"type": "string",
"search_analyzer": "autocomplete"
}
}
}
}
}
Индексируйте документ
/POST http://localhost:9200/test/users/1/
{
"IPRANGE":"trial"
}
Поисковый запрос:
/POST http://localhost:9200/test/users/_search
{
"query": {
"match": {
"IPRANGE": "tr"
}
}
}
Возвращает следующий результат:
{
took: 10
timed_out: false
_shards: {
total: 5
successful: 5
failed: 0
}
hits: {
total: 1
max_score: 0.30685282
hits: [
{
_index: test
_type: users
_id: 1
_score: 0.30685282
_source: {
IPRANGE: trial
}
}
]
}
}