Web検索エンジンにOracle11gとOracleTextを使用しています。
Keywords
これで、スペースで区切られた単語を含むCLOB列を作成してテキストインデックスを作成しました。Oracle Textは、その列に1つ以上のキーワードが格納されている行を返すため、これにより検索を拡張できました。列の内容はユーザーには表示されず、検索を「拡張」するためにのみ使用されます。これは意図したとおりに機能しています。
しかし今、私は複数の単語や完全な文をサポートする必要があります。現在の構成では、OracleTextは個々のキーワードのみを検索します。フレーズを保存し、フレーズ全体を検索するようにOracle Textを構成するにはどうすればよいですか(完全一致が推奨されますが、あいまい一致も問題ありません)。
2行の列コンテンツの例(セミコロンで区切られた値):
"hello, hello; is there anybody out there?; nope;"
"just the; basic facts;"
同様の質問を見つけました。フリーテキスト検索機能を備えたOracle11gのソリューションが必要なことを除いて、カンマ区切りの値で列を検索しています。
可能な解決策:
1つ目の解決策:DBを次のように再設計することを考えていました。新しいテーブルを作りますKeywords(pkID NUMBER, nonUniqueID NUMBER, singlePhrase VARCHAR2(100 BYTE))
。そして、前の列Keyword
をに変更しますKeywordNonUniqueID
。これは、(値のリストではなく)IDを保持します。検索時に、新しいKeyword
テーブルを使用して内部結合します。このソリューションの問題は、フレーズを除いて同じデータを含む複数の行を取得することです。これでランキングが崩れると思いますか?
2番目の解決策:フレーズを元のKeyword
列にXMLとして格納し、どういうわけかOracle TextにXML内を検索するように指示することは可能ですか?
3番目の解決策:?
一般に、フレーズは多くない(100未満)ことも、長くなることもありません(1つのフレーズには最大5つの単語が含まれます)。
CONTAINS
また、全文検索のニーズに、現在、とその演算子のいくつかを使用していることにも注意してください。
編集:このhttps://forums.oracle.com/forums/thread.jspa?messageID=10791361ディスカッションは、私の問題をほぼ解決しますが、フレーズ全体ではなく、個々の単語にも一致します(完全一致)。