Создать индекс Lucene для функции автозаполнения адреса - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь использовать Индекс Cassandra Lucene Stratio для создания функции автозаполнения для адресов, но до сих пор мне удавалось получить только те результаты, которые соответствуют названиям улиц.

Разработка:

В своей таблице я (возможно, неправильно) создал текстовое поле fullAddress (т. Е. Поле, значением которого является объединение других полей, таких как streetName , houseNumber , почтовый индекс и т. Д.).

Затем я создаю свой индекс следующим образом:

CREATE CUSTOM INDEX address_lucene_index ON address.address ()
USING 'com.stratio.cassandra.lucene.Index'
WITH OPTIONS = {
   'refresh_seconds': '1',
   'schema': '{
      fields: {
         fulladdress: {type: "text"}
      }
   }'
};

Затем я выдаю следующий запрос:

SELECT * FROM address.address WHERE expr(address_lucene_index, {query: {type: "fuzzy", field: "fulladdress", value: "<SEARCH_STRING>"}})

Поведение выглядит следующим образом:

  • Если SEARCH_STRING = несколько букв названия улицы, существующего в базе данных, я получаю ряд релевантных результатов. Это хорошо.
  • Если SEARCH_STRING = название улицы + номер дома (fx: "Mainroad 3"), я не получаю никаких результатов, даже если база данных содержит адрес "Mainroad 3, 3rd floor". Каким-то образом написание более точного адреса улицы не приводит к совпадению.

Я новичок в Люсене и Кассандре. Мой текущий поиск онлайн-поддержки нацелен на поисковые термины, такие как анализаторы Lucene и токенизаторы. Но я мог бы помочь с общим направлением. Возможно, мне не следует использовать это синтетическое fullAddress поле, а создать индекс по отдельным полям компонента адреса?

РЕДАКТИРОВАТЬ: Вышеупомянутый подход фактически работает частично, в том смысле, что действительно возвращает некоторые совпадения также при вводе названия улицы + номера дома. Однако решение это все же не твердое. Fx, введя весь адрес, не возвращает совпадений.

...