-1

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

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;
4

1 回答 1

0

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

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

于 2017-01-18T22:18:15.140 回答