在Oracle

时间:2016-12-23 05:55:56

标签: oracle oracle11g oracle-text

我有一个under contains子句查询以获得最佳匹配查询。我在表格中有以下两个值:

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;

1 个答案:

答案 0 :(得分:0)

两条记录都与ACCUM查询匹配。假设您使用默认的BASIC_LEXER而没有任何词汇TRUST ACCOUNTS ACT 1973得分更高,主要是因为TRUST与您的查询完全匹配。如果您将查询更改为{TRUSTS} ACCUM {ACT} ACCUM {1973},则TRUSTS ACT 1973会获得更高的分数。

根据您的要求,您可能需要考虑短语搜索而不是ACCUM,例如: CONTAINS(title, '{TRUSTS} {ACT} {1973}') > 0。在这种情况下,短语必须与记录完全匹配。