問題タブ [oracle-text]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - Oracle Text索引でOQLを使用できますか?
Oracle Text索引を持つデータベースがあり、オブジェクト問合せ言語(OQL)でアクセス・レイヤーを使用したいと考えています。
ステートメントを次のように使用したい
私のOQLアクセスレイヤーで。
これは可能ですか、それとも OQL 標準でサポートされていませんか?
sql - Oracle:条件付きの全文検索
次のようなOracleTextインデックスを作成しました。
そして、私は次のことを行うことができます:
しかし、このテーブルに別の列があるとしましょう。たとえばgroup_id
、、代わりに次のクエリを実行したいとします。
上記のインデックスを使用すると、Oracleは、を含むすべてのアイテムを検索してから'blah'
、それらのすべてをチェックする必要がありgroup_id
ます。
理想的には、でアイテムのみを検索しgroup_id = 43
たいので、次のようなインデックスが必要です。
通常のインデックスのようなものなので、それぞれに対して個別のテキスト検索を実行できますgroup_id
。
Oracleでこのようなことをする方法はありますか(それが重要な場合は10gを使用しています)?
編集(説明)
100万行、次の2列、A
およびB
、両方が数値であるテーブルについて考えてみます。500個の異なる値A
と2000個の異なる値がありB
、各行が一意であるとします。
では、考えてみましょうselect ... where A = x and B = y
でインデックスを作成しA
、B
私が知る限り、でインデックス検索を実行するB
と、500の異なる行が返され、これらの行で結合/スキャンが実行されます。いずれの場合も、少なくとも500行を調べる必要があります(データベースが幸運で、必要な行を早期に見つけることは別として)。
上のインデックス(A,B)
ははるかに効果的ですが、1つのインデックス検索で1つの行を検索します。
別々のインデックスを付けてgroup_id
、私が感じるテキストは、クエリジェネレータに2つのオプションしか残していません。
(1)group_id
インデックスを使用し、結果のすべての行をスキャンしてテキストを探します。
(2)テキストインデックスを使用し、結果のすべての行をスキャンして。を探しますgroup_id
。
(3)両方のインデックスを使用し、結合します。
私が欲しいのに対して:
(4)インデックスを使用して(group_id, "text")
、特定のテキストインデックスを検索し、group_id
そのテキストインデックスをスキャンして、必要な特定の行を探します。でインデックスを使用する場合のように、スキャンやチェック、結合は必要ありません(A,B)
。
sql - データベースに名前を問い合わせる際の提案
私は、多くのデータベースと同様に、経歴情報を含むテーブルを持つ Oracle データベースを持っています。その上で、「自然な」方法で名前で検索したいと思います。
テーブルにはforename
とsurname
フィールドがあり、現在、次のようなものを使用しています。
これは機能しますが、このテーブルのインデックスは明らかに前のワイルドカードを考慮できないため、非常に遅くなる可能性があります。また、ユーザーは通常、電話で話した内容に基づいて人を検索します (膨大な数の英語以外の名前を含む)。そのため、音声分析も行うとよいでしょう。
そのため、私は Oracle Text を試しています。
これには、Soundex アルゴリズムとフルテキスト インデックスを使用できるという利点があるため、もう少し効率的である必要があります。(ただし、私の逸話的な結果は、かなり遅いことを示しています!) これについて私が持っている唯一の懸念は次のとおりです。
まず、テキスト インデックスを意味のある方法で更新する必要があります。使用
on commit
すると遅すぎて、フロントエンド ソフトウェア (私の制御範囲外) がデータベースと対話する方法に干渉する可能性があります。そのため、いくつかの検討が必要です...Oracle から返される結果は、正確に自然にソートされているわけではありません。
score
この機能についてはよくわかりません。たとえば、私の開発データでは、「Jonathan Peter Jason Smith」が一番上に表示されていますが、「Jane Margaret Simpson」は「John Terrance Smith」と同じレベルにあります。
実生活では、名前の途中でチャンクを検索することは決してないため、前のワイルドカードを削除すると、結果を低下させることなくパフォーマンスが向上する可能性があると考えています。しかし、そうでなければ、私はアイデアを受け入れます... このシナリオは、うんざりして実装されたに違いありません! 私が今やっている/考えていることに対して、より良いアプローチを提案できる人はいますか?
ありがとう :)
jpa - JPAでのOracle Text基準問合せ
Oracle Textのcontains文を使用してJPA Criteria問合せを実行することは可能ですか?
oracle - Oracle Textの複数列索引ベースの問合せで行が返されません
、、、の3 つの列を持つMAH_KERESES_MV
テーブルがあります。次の複数列のOracle Text索引を作成します。OBJEKTUM_NEV
KERESES_SZOVEG_1
KERESES_SZOVEG_2
ただし、クエリは行を返しませんが、like
演算子を使用してクエリを作成すると、期待どおりの結果が得られます。
誰かが助けてくれませんか?ティア、
タマス
oracle - .Net と Devart の dotConnect for Oracle を使用した Oracle テキスト検索
キーワードを使用してすべてのテーブルを検索する必要がある Web アプリケーションがあります。Linq クエリを使用する以外に、Google ではあまり見つかりませんでした。
Web アプリケーションではなく、Oracle が検索を実行する必要があります。
この方法を使用する解決策を見つけた人はいますか? 私たちが持っている Oracle データベースのビューでは、dotConnect for Oracle を使用する必要があります。
sql - Oracle DBMS_LOB.INSTR および CONTAINS のパフォーマンス
dbms_lob.instr と contains の間にパフォーマンスの違いはありますか、それとも何か間違っていますか?
これが私のコードです
instr を使用するために最後の 2 行が変更されました
私の問題は、contains の代わりに instr を使用したいということですが、instr は contains よりもずっと遅いように思えます。
sql - CONTAINSはOracleTextでは機能しません
このクエリの実行に問題があります。
それは私に与えています
いくつかのグーグルの後、私はその問題がインデックスにある可能性があることを発見しましたが、テーブルとインデックスを見ると、それらは私には問題ないように見えました。
インデックスの作成スクリプトは次のようになります
私にとって奇妙なのは、SQL Developerのテーブルプロパティでテーブルを編集すると、インデックスの動作ステータスが失敗していることがわかることだけです。誰かがそれが何を意味するのか知っていますか?多分DB権?
また、使用すると動作します
それ以外のcontains
アドバイスありがとうございます
PSこれは私の前の質問に関連していますOracleDBMS_LOB.INSTRおよびCONTAINSパフォーマンス
アップデート
インデックスを再作成して遊んだ後、上記のクエリを実行できることに気づきましたが、何も返されません。
で試してみるとCONTAINS(gob_a_document, '%')
、結果は26行であり、クエリがそれらを選択したキーがわかりません(少なくとも、明らかなものは見つかりませんでした。さらに調査します)。問題は、Oracle 10gを使用していて、バージョン11からサポートされているDOCXファイルを保存していることである可能性があります。
oracle - OracleTextを使用してドキュメントのテキスト内の「AND」、「OR」、「NOT」を検索します
OracleText は、これらの単語に対して特別な意味を持ちます。テキスト自体にそれらがある場合はどうなりますか?
たとえば、d1.txt には「cats and dogs」があり、d2.txt には「cats」があります。「cats and dogs」という語句を検索すると、d1.txt のみが取得されます。
oracle - Oracle 11g Text: 複合ドメイン インデックス - 異なるテーブルの列に対する FILTER BY
Oracle 11g Text を使用していますが、
AuthorTable : (著者の詳細のテーブル) AuthorId、AuthorName、AuthorDOB
ArticleTable : (記事コンテンツのテーブル) ArticleId、WrittenDate、PublishDate、ARTICLE_TXT (CLOB)
LocationTable : (場所のテーブル) LocationId、LocationState、LocationCity
ArticleAuthorAssocTable : (Article-Author Association のテーブル) AuthorId、ArticleId
LocAuthorAssocTable : (Author-Location Association のテーブル) AuthorId、LocationId、LocationStartDate、LocationEndDate
私のクエリは、ARTICLE_TXT の入力検索語と、PublishDate / WrittenDate / AuthorDOB / LocationCity / LocationStartDate の範囲の他のクエリを検索する必要があります。
混合クエリを実行する必要があるため、ArticleTable で複合ドメイン インデックス CDI の作成を開始しました。
およびクエリ
今私の質問は次のとおりです。
- 異なるテーブルの列に FILTER BY を使用して複合ドメイン インデックスを作成することは可能ですか?
- 上記のクエリを改善する他の方法はありますか?
私の調査によると、いくつかのオプションはマテリアライズドビュー、関数ベースのインデックス、USER_DATASTORE を使用しています。
残念ながら、それらの使用方法はまだわかりません...あなたの知識を手伝ってください。
ありがとう