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
                }
            }
        ]
    }
}
Другие вопросы по тегам