Нечеткий поиск позиционного инвертированного индекса

#c# #indexing #edit-distance

Вопрос:

Использование позиционной инвертированной индексной структуры, например

 var index = new Dictionarylt;string, Dictionarylt;int, Listlt;intgt;gt;gt;() {  ["bar"] = new Dictionarylt;int, Listlt;intgt;gt;()  {  [3] = new Listlt;intgt;() { 33, 45, 182 },  [18] = new Listlt;intgt;() { 611, 794 },  ...  },  ["foo"] = new Dictionarylt;int, Listlt;intgt;gt;()  {  ... }  

который имеет { term: { docno: [...positions] } } структуру, как я могу выполнять нечеткий поиск для запросов фраз?

ElasticSearch и Lucene имеют поддержку расстояния редактирования Левенштейна, но, похоже, находятся на уровне символов, gppgle соответствует google , если fuzziness параметр равен 2 (для расстояния редактирования 2).

Однако я хочу соответствовать на уровне слов, ten people должен соответствовать ten in people , one two three должен соответствовать one and three (в зависимости от «нечеткости» поиска).

Я не уверен, как это эффективно реализовать, учитывая, что в моем распоряжении есть индекс.

Запросы фраз можно реализовать, просто проверив, отображается ли для позиции каждого слова в документе следующее слово запроса в том же документе на одно слово дальше.

Запросы близости реализуются так же, как запрос фразы, но позволяют следующему слову запроса отображаться на некотором расстоянии от предыдущего слова. Все термины должны существовать в документе, чтобы соответствовать друг другу.

Как я могу реализовать запрос «Расстояние редактирования»?

Комментарии:

1. Структура вашего словаря не подходит для этой задачи

2. @TheGeneral Какая структура индекса подходит для этой задачи