2013-05-24 6 views
1

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

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

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. Вместо этого я хотел бы дать указание оракулу игнорировать правую часть моего И.

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

В принципе, я хочу, чтобы выиграть в соответствии с

(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 в Alternative and User-defined Scoring Серион, но не много примеров.

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

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; 

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

+0

спасибо за ввод, я посмотрю на это ближе в ближайшее время. –

 Смежные вопросы

  • Нет связанных вопросов^_^