Oracle Text: Как не подсчитать часть запроса для скоринга?

У меня есть многоколоночное хранилище данных, проиндексированное с использованием Oracle Text, и я выполняю запросы с использованием ключевого слова Contains.
Чтобы по-разному взвешивать различные столбцы, я действую следующим образом.

Если пользователь ищет слово "ужасный", запрос к oracle будет выглядеть следующим образом:

WHERE CONTAINS(indexname,
   '((horrible WITHIN column1) * 3) 
    OR ((horrible WITHIN column2) * 2))') > 1

Но чтобы добавить фильтр категорий, который также индексируется, я делаю это:

WHERE CONTAINS(indexname,
   '((horrible WITHIN Column1) * 3) 
    OR ((horrible WITHIN Column2) * 2))
    AND (movie WITHIN CategoryColumn)', 1) > 1

Это фильтрует по категориям, но это полностью портит оценку, потому что текст Oracle будет иметь наименьшую оценку с любой стороны ключевого слова AND. Вместо этого я хотел бы поручить оракулу игнорировать правую часть моего AND.

Есть ли способ, чтобы эта конкретная часть запроса игнорировалась оценкой?

В основном, я хочу забить в соответствии с

(horrible WITHIN Column1) * 3 
OR (horrible WITHIN Column2) * 2) 

но я хочу выбрать в соответствии с

'((horrible WITHIN Column1) * 3) 
 OR ((horrible WITHIN Column2) * 2))
 AND (movie WITHIN CategoryColumn)'

1 ответ

Есть упоминание о

Укажите, как следует объединять оценку из дочерних элементов операторов OR и AND.

в Oracle Docs в разделе Альтернативный и пользовательский скоринг, но примеров не так много.

Использование релаксации запросов может быть проще в этом случае (если это работает), например:

where CONTAINS (indexname,
 '<query>
   <textquery lang="ENGLISH" grammar="CONTEXT">
     <progression>
       <seq>(horrible WITHIN Column1) AND (movie WITHIN CategoryColumn)</seq>
       <seq>(horrible WITHIN Column2) AND (movie WITHIN CategoryColumn)</seq>
     </progression>
   </textquery>
   <score datatype="INTEGER" algorithm="COUNT"/>
</query>')>0;

Таким образом, вам не нужно присваивать веса, так как результат более расслабленного запроса никогда не превышает предыдущий по порядку.

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