在Oracle中使用contains子句时需要精确的结果
我有一个下面的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
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。在这种情况下,短语必须与记录完全匹配