我有一个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;
答案 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
。在这种情况下,短语必须与记录完全匹配。