#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 Какая структура индекса подходит для этой задачи