Я пытаюсь выполнить свободный текстовый поиск по таким терминам, как «номер модели Sony np-fx110» или «чехол для sony sz-vgn770N» или «модель ноутбука Asus g60v».
Я знаю, что свободный текст обрабатывает числа как шум, поэтому я решил, что отредактирую числа из файла noiseENU.txt для SQL Server 2008, но не могу найти файлы шума на моем сервере.
Каталог FTData содержит только несколько файлов XML размером 2 КБ и пустую папку FilterData.
У меня есть функция split, которая будет возвращать все слова в заданной строке с разделенным символом пробела. Мне нужен CTE, который объединит текст AND для каждого слова, возвращаемого функцией SPLIT ().
> SELECT * FROM MyTable WHERE
> Description LIKE '%asus%' AND
> Description LIKE '%laptop%' AND
> Description LIKE '%model%' AND
> Description LIKE '%g60v%'
По существу, номер модели может быть где угодно в поле описания. Я легко могу сделать LIKE [номер модели], однако я бы хотел сопоставить это с другими словами, содержащимися в описании.
Это не похоже на оптимальный подход, но выполнимо. Буду признателен за любые другие предложения о том, как решить эту проблему.
Спасибо.
UPDATE
Вот результат запуска "exec sp_help_fulltext_catalogs"
> ftcatid:5 NAME: CTIMytemDataCatalog
> PATH: NULL
> STATUS: 0
> NUMBER_FULLTEXT_TABLES: 1
UPDATE
Проблема возникает, когда номер модели представляет собой просто число, например «4» в «iphone 4».
Я уже динамически создаю запрос CONTAINS, вставляя AND между каждым термином. Тем не менее, вот некоторые проблемы:
> **WHERE CONTAINS(*, 'iphone AND 4 AND battery')** - returns 0 results
> **WHERE FREETEXT(*, 'iphone 4 battery')** - is matching for iphone
> OR battery which is sub-optimal
> **WHERE CONTAINS(*, '"iphone 4" AND "battery"')** - returns the most
> accurate result set
Учитывая эти выводы, я думаю, что мне следует вести список этих "особых случаев" в таблице и динамически генерировать мой запрос CONTAINS на основе этого.
Есть предложения по этому подходу?