Oracle Fuzzy Search с пробелами

Я хочу выполнить нечеткий поиск в Oracle, но запрос не работает с пробелами.

бывший. Допустим, у нас есть таблица po_test_tmp, в которой много записей.

Если мы выполним этот запрос, он отлично работает

select score(1), ae.po_number
from po_test_tmp ae
where CONTAINS(po_number, 'fuzzy(po, 50,5000, weight)', 1)> 0
order by score(1) desc;

Но если мы попытаемся найти такой термин, как PO 123, он не сработает.

select score(1), ae.po_number
from po_test_tmp ae
where CONTAINS(po_number, 'fuzzy(PO 123, 50,5000, weight)', 1)> 0
order by score(1) desc;
ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
DRG-50901: text query parser syntax error on line 1, column 10  
29902. 00000 -  "error in executing ODCIIndexStart() routine"
*Cause:    The execution of ODCIIndexStart routine caused an error.
*Action:   Examine the error messages produced by the indextype code and
           take appropriate action.

Как выполнить нечеткий поиск, если поисковый запрос содержит пробелы, а поисковый запрос может содержать специальный символ и несколько пробелов.


person Kuldeep    schedule 04.02.2021    source источник


Ответы (1)


Сначала ознакомьтесь с документацией по Fuzzy. оператор

Параметр term. Укажите слово, для которого выполняется нечеткое расширение.

Обратите внимание, что термин обычно не содержит пробелов, и вам придется разделить поиск на отдельные термины.

Кроме того, обратите внимание, что для активации fuzzy термин должен содержать не менее 3 символов. Так что ваш пример с PO не сработает.

Что вы можете сделать для своей установки, так это определить дополнительный fuzzy поиск для каждой части вашей нечеткой строки и объединить их с near оператор, например:

 contains(po_number,'near (( fuzzy(word1,,,weight),fuzzy(word2,,,weight) ), 2, TRUE)',1) > 0

near требует, чтобы оба совпадения были смежными (span = 2) и упорядоченными (TRUE).

Обработка специальных символов зависит от определения ваших whitespace и printjoins в ваших настройках.

person Marmite Bomber    schedule 04.02.2021