我有一個查詢需要連續運行28000次,所以我認爲使用preparedStatement可能是一個聰明的想法。PreparedStatement with CONTAINS查詢
這裏是我的查詢:
String requestWithFirstName = "SELECT SE.ELEMENT_ID, SE.LASTNAME||' '||SE.FIRSTNAME AS ELEMENT, (SCORE(1)+SCORE(2))/2 AS SCORE "
+ "FROM BL_SUSPICIOUS_ELEMENT SE "
+ "WHERE CONTAINS(SE.LASTNAME, 'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 1)>0 "
+ "AND CONTAINS(SE.FIRSTNAME, 'fuzzy({' || ? || '},' || ? || ',' || ? || ', weight)' , 2)>0 "
+ (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?" : "")
+ " ORDER BY SCORE DESC";
Everthings工作得很好,直到我們意識到,模糊方法並不像分裂的話表現良好「皮卡丘是我心目中的英雄」,它是建議創建的,在這情況下,4模糊搜索'皮卡丘''是''我的''英雄'。不確定這是否是真實的,但因爲我將運行28 000次查詢,這是一個很好的機會看到它的行動。
於是,我就修改以這種方式查詢:
"SELECT A.ELEMENT_ID, A.LASTNAME||' '||A.FIRSTNAME AS AKA, SCORE(1) AS SCORE "
+ "FROM BL_AKA A, BL_SUSPICIOUS_ELEMENT SE "
+ "WHERE CONTAINS(A.LASTNAME, ?, 1)>0 "
+ "AND SE.ELEMENT_ID = A.ELEMENT_ID "
+ (type > 0 ? "AND SE.ELEMENT_TYPE_ID = ?": "")
+ " ORDER BY SCORE DESC";
在這種情況下,?將被設置爲:
'fuzzy({Burnham},70,4,weight),fuzzy({Investors},70,4,weight),fuzzy({Trust},70,4,weight)'
查詢似乎很好,在sql dev上運行。但是,對於Java,我得到以下錯誤:
ORA-20000: Oracle Text error: DRG-50900: text query parser error on line 1, column 30
DRG-50920: part of phrase not itself a phrase or equivalence
DRG-50900: text query parser error on line 1, column 30
DRG-50920: part of phrase not itself a phrase or equivalence
有什麼建議嗎? 我不知道這是否與在聲明中的情況相同(不可能創建一個select * from怪獸在(?))
謝謝!
謝謝,那實際上是我的錯誤。現在完美的工作! – Farid