Ожидание точных результатов при использовании предложения contains в Oracle

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

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

Когда я выполняю поиск, используя приведенный ниже запрос со строкой "TRUST 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;

person Vinoth Kumar    schedule 23.12.2016    source источник


Ответы (1)


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

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

person DKroot    schedule 18.01.2017