1

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ディスカッションは、私の問題をほぼ解決しますが、フレーズ全体ではなく、個々の単語にも一致します(完全一致)。

4

1 に答える 1

1

Oracleは、デフォルトでフレーズの検索をサポートしています。ドキュメントでこれを見ることができます

4.1.4.1にはフレーズクエリが含まれています

空白スペース(演算子なし)のみで区切られた複数の単語がクエリ式に含まれている場合、単語の文字列はフレーズと見なされ、OracleTextはクエリ中に文字列全体を検索します。

たとえば、「国際法」というフレーズを含むすべてのドキュメントを検索するには、「国際法」というフレーズを使用してクエリを入力します。

私はあなたの質問に答えましたか、それともあなたを誤解しましたか?

PS解決策は変換されているように私には思えます

「こんにちは、こんにちは。そこに誰かいますか?;いいえ;」「ただ;基本的な事実;」

「こんにちは、こんにちはaa誰かがそこにいますか?aanopeaa」「ただaa基本的な事実aa」

CONTAINSで「そこに誰かいますか?aa」というフレーズを検索します。

于 2013-01-17T13:17:39.823 に答える