2016-12-23 6 views
-1

У меня есть запрос с предложениями ниже, чтобы получить наилучшие совпадающие запросы. У меня есть ниже двух значений в таблице:Ожидающие точные результаты при использовании предложения contains в Oracle

1. TRUSTS ACT 1973 and 
2. TRUST ACCOUNTS ACT 1973. 

Когда я ищу, используя ниже запроса со строкой «ТРАСТ ACT 1973», для этого поиска фактический результат приходит как TRUST ACCOUNTS ACT 1973. Но я ожидаю точный результат как *TRUSTS ACT 1973*.

Запрос:

SELECT 
    /*+first_rows(11) index(a fuzzy_leg_nm_idx)*/ 
    a.unique_legislation_id, 
    a.legislation_name, 
    a.jurisdiction, 
    score(1) sc 
    FROM AU_LEG_PARALLEL_FUZZY a 
    WHERE contains (legislation_name, 
    '<query> 
     <textquery lang="ENGLISH" grammar="CONTEXT"> ' 
     || '<progression> 
       <seq>{TRUST} ACCUM {ACT} ACCUM {1973}</seq> 
      </progression> 
     </textquery> 
     <score datatype="INTEGER" algorithm="COUNT"/> 
    </query>', 1) > 0 
ORDER BY score(1) DESC; 

ответ

0

Обе записи соответствуют запросу Accum. Предполагая, что вы использовали значение по умолчанию BASIC_LEXER без слова, начинающегося с TRUST ACCOUNTS ACT 1973, результат выше, главным образом потому, что TRUST соответствует именно вашему запросу. Если вы измените запрос на {TRUSTS} ACCUM {ACT} ACCUM {1973}, тогда TRUSTS ACT 1973 получит более высокий балл.

В зависимости от ваших требований вы можете рассмотреть поиск фразы, а не ACCUM, например. CONTAINS(title, '{TRUSTS} {ACT} {1973}') > 0. В этом случае фраза должна точно соответствовать записи.