在Oracle中使用contains子句时需要精确的结果

在Oracle中使用contains子句时需要精确的结果,oracle,oracle11g,oracle-text,Oracle,Oracle11g,Oracle Text,我有一个下面的contains子句查询来获得最佳匹配查询。表中有以下两个值: 1. TRUSTS ACT 1973 and 2. TRUST ACCOUNTS ACT 1973. 当我使用下面的查询和字符串TRUST ACT 1973进行搜索时,对于此搜索,实际结果为TRUST ACCOUNTS ACT 1973。但我期待着1973年《信托法》的确切结果 查询: SELECT /*+first_rows(11) index(a fuzzy_leg_nm_idx)*/ a.un

我有一个下面的contains子句查询来获得最佳匹配查询。表中有以下两个值:

1. TRUSTS ACT 1973 and 
2. TRUST ACCOUNTS ACT 1973.
当我使用下面的查询和字符串TRUST ACT 1973进行搜索时,对于此搜索,实际结果为TRUST ACCOUNTS ACT 1973。但我期待着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;

两条记录都与ACCUM查询匹配。假设您使用了默认的基本语法,没有单词词干的信任帐户法案1973得分更高,主要是因为信任与您的查询完全匹配。如果将查询更改为{TRUSTS}ACCUM{ACT}ACCUM{1973},那么TRUSTS ACT 1973将获得更高的分数

根据您的需求,您可能需要考虑短语搜索而不是AcCUM,例如CultSistle,“{truths}{Act }{ 1973 }>0。在这种情况下,短语必须与记录完全匹配