FullTextIndex в NexusDB, как токенизировать строку поиска

Мы используем NexusDB для небольшой базы данных. У нас есть таблица с определенным FulltextIndex. Индекс настроен со следующими параметрами:

  • Разделитель символов
  • ccPunctuationDash
  • ccPunctuationOther

Пользователь вводит текст поиска в поле редактирования, а затем создается оператор SQL со следующим предложением WHERE (%s заменяется на Editbox.text, конечно):

WHERE CONTAINS(FullIdx, ''%s'')

Когда пользователь вводит несколько слов в поле ввода, это происходит неправильно, так как два отдельных слова должны были быть встроены в предложение WHERE следующим образом:

WHERE CONTAINS(FullIdx, 'word1' and 'word2')

Поэтому мне нужно проанализировать значение текстового поля, отсканировать его на наличие пробелов и разбить текст в этих точках. Это заставило меня задуматься, можно ли было проанализировать текст поиска для каждой настройки индекса Fulltextindex, используя фактическое определение индекса Fulltextindex для создания правильного предложения where.

Таким образом, если ccPunctuationDash включен в определении FulltextIndex, то текст поиска также разделяется на "-".

Если вы думаете об этом, это точно такой же процесс, как и при создании индекса, и все строки токенизируются...

Мой вопрос: какой самый простой способ токенизации строки поиска в соответствии с настройками FUlltextIndex?

1 ответ

Самый простой способ... создать пустую таблицу #tevent со строковым полем, с теми же настройками полнотекстового индекса, что и у вашей реальной таблицы. Установить TnxTable.Options включать dsoAddKeyAsVariantField, Загрузите строку для токенизации в строковое поле, а затем просмотрите таблицу, проиндексированную полнотекстовым индексом. Presto, вы получите дополнительное поле, которое представляет собой отсортированные токены. Теперь вы можете перебирать таблицу, чтобы прочитать токены.

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