Может ли Elasticsearch вернуть "успешный" размытый гонт?

TL;DR

Можно ли сделать так, чтобы Elasticsearch возвращал совпавший входной ключ вместе с совпавшим документом в нечетком запросе?

Пример:

Допустим, у меня есть гонт

"fulltext_shingle_filter":{
  "type": "shingle",
  "min_shingle_size": 2,
  "max_shingle_size": 3,
  "output_unigrams": false
}

И этот галька используется в пользовательском поисковом анализаторе:

"fulltext_shingle":{
  "type": "custom",
  "tokenizer": "standard",
  "filter":["fulltext_shingle_filter"]
}

Индекс анализируется как ключевые слова, например:

"whitelist_keyword": {
  "type": "custom",
  "tokenizer": "keyword"
}

с документами, выглядящими примерно так:

{
"_source": {
  "names": [
    "John Smith",
    "Smith, John"
  ]
},
{
"_source": {
  "names": [
    "Mr Wayne"
  ]
}

И мы запрашиваем так:

POST /someindex/_search
{
  "query": {
    "match": {
    "names": {
      "query": "Hi, my Name is John Smit, I like toast.",
      "analyzer": "fulltext_shingle",
      "fuzziness": 1
      }
    }
  }
}

Это разделило бы запрос с помощью нашего fulltext_shingle-analyzer и применило бы нечеткость 1 к, среди прочего, к гальке "Джон Смит". Затем Elasticsearch возвращает документ, содержащий "Джона Смита", так как расстояние Левенштейна равно 1.

Теперь, возможно ли сделать, чтобы упругий поиск возвращал входной шингл, использованный до размытия, то есть "Джон Смит", рядом с соответствующим документом?

Единственное, о чем я мог подумать, - это, по сути, полностью изменить запрос, то есть проиндексировать документ запроса с включенной черепицей, а затем запросить исходный вывод ("Джон Смит") с той же нечеткостью. Но это кажется ужасно подверженным ошибкам и трата ресурсов.

0 ответов

Другие вопросы по тегам