問題タブ [full-text-indexing]
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.
php - 複数の針を持つstrpos()?
2つの重要な違いがあるstrpos()のような関数を探しています。
- 複数の針を受け入れることができるようにするため。私は1つで何千もの針を意味します。
- 干し草の山の中の針のすべての出現を検索し、開始位置の配列を返すため。
もちろん、それはすべての針をループするだけでなく、効率的な解決策でなければなりません。私はこのフォーラムを検索しましたが、次のような同様の質問がありました。
しかし、それらのネザーは私が探していたものでした。私は自分の質問をよりよく説明するためにstrposを使用しています。おそらく、この目的のためにまったく異なるものを使用する必要があります。
私はZend_Search_Luceneを知っていますが、これを実現するために使用できるかどうか、そしてどのように(一般的な考え方)に興味がありますか?
あなたの助けと時間をどうもありがとう!
php - 3列でMATCHを検索するMySQLクエリ?
列のフルテキストインデックスを作成しましたCity, Group and Text
:city_group_text_comparator
3つすべての文字列を検索する簡単なクエリを実行するにはどうすればよいですか?
私はこれを試しました:
結果をどのように並べ替えますか?
ありがとう
html - HTML の一部をインデックスに登録しない
ページ コンテンツの関連性を高めるために HTML のインデックス作成を制限する方法はありますか? たとえば、ロボットからメニューなどを除外します。昔、これ専用のタグをいくつか見た記憶がありますが、情報が見つかりませんでした。
検索エンジンはそのような方法をどのようにサポートしていますか (Google/Bing)?
sql - SQLServerフルテキストインデックスはすべてのデータを返すわけではありません
私のテーブルには、次のような列に格納されているデータモデルpublicationDate
として設定された公開日という列があります。NVarChar
これを使用してSQLからクエリを取得すると、このテーブルにフルテキストインデックスが作成されました。
戻ってきたばかりです:
しかし戻らない2008-10-23
では、どうすればを含むすべてのデータを取得できます2008
か?
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)
。
mysql - MySQL はいつ FTS インデックスを再構築しますか?
MySQL 全文検索機能を使用する場合は、VARCHAR タイプのフィールドに全文索引を定義します。行は INSERT および UPDATE されるため、mysql はインデックスを最新の状態に保つ必要があります。私の質問は、MySQL が FTS インデックスを再構築するのはいつですか?
- A) インデックスに影響を与える INSERT または UPDATE が発生した直後。
- B) 最近 UPDATE または INSERT の影響を受けたインデックスを必要とする最初の SELECT が実行されるとき。
- C) 他の何か。
不必要な背景情報: 私の経験では、オプション B を考えているようです。これは正しいですか? 全文検索を実行するランダムな低速クエリが突然発生し、一部のクエリが低速で他のクエリがそうでない理由がわからないため、質問します。私の推測では、mysql が FTS インデックスを再構築するのを待っている場合、クエリが遅くなる可能性がありますが、これが mysql の仕組みかどうかはわかりません。ランダムな低速クエリの例 (通常、同じクエリは 1 秒未満で実行されます)。低速ログに低速の UPDATE または INSERT はありません。
Lock_time に注意してください。スローログに他の INSERT または UPDATE が表示されないため、何を待っているのかわかりません。それが、FTS インデックスの再構築を待っている可能性があると推測した理由です。
java - Java用の全文検索ソリューション?
さまざまな種類のエンティティの大規模なセットがあります。
タスクは、このセットの全文検索を実装することです。全文検索とは、探している部分文字列を含むエンティティを取得する必要があることを意味します(正確なプロパティ、この部分文字列が存在する場所の正確なオフセットなどを知る必要はありません)。現在の実装では、Entity
インターフェースには次のメソッドがありますmatches(String)
。
各エンティティクラスは、その内部に応じてそれを実装します。
このアプローチは本当にひどいものだと思います(ただし、機能します)。新しいセットがあるたびに、Luceneを使用してインデックスを作成することを検討しています。インデックスとは、コンテンツ->IDマッピングを意味します。内容は、私が検討しているすべてのフィールドのほんの些細な「合計」です。したがって、Entity1
コンテンツはとの連結にfield1()
なりfield2()
ます。パフォーマンスについては疑問があります。インデックスの作成は非常にコストのかかる操作であることが多いため、それが役立つかどうかはわかりません。
他に何か提案はありますか?
詳細を明確にするには:
Set<Entity> entities = ...
〜10000アイテムです。Set<Entity> entities = ...
DBから読み取られないので、where ...
条件を追加するだけでは不十分です。データソースは非常に重要なので、私はその側で問題を解決することはできません。Entities
短い記事のように考える必要があるため、一部のフィールドは最大10KBである場合があり、他のフィールドは最大10バイトである場合があります。- この検索は頻繁に実行する必要がありますが、クエリ文字列と元のセットの両方が毎回異なるため、インデックスを1回だけ作成することはできないようです(エンティティのセットは毎回異なるため)。
mysql - MyISAM の FullText INDEXING が非常に遅い
私はテーブルを持っています
これには約10万件のレコードがあります。
このテーブルは、約 8k のレコードを持つ LOAD DATA INFILE で 1 時間ごとに更新されます。
テーブルがロックされる時間は約 30 秒です。私が作る時間に対応する
私の問題は、30 秒が本当に長いことです。このテーブルは 5 回/秒クエリされるため、キューは 30 x 5 = 150 に達します。最大接続制限が 100 に設定されているため、mysql サーバーは一部の受信接続を拒否し始めます。
将来的には、このテーブルに少なくとも 100 万行を追加する予定ですが、これ以上速くなることはないと思います。
mysql がインデックスの更新に使用する時間を短縮するためにできることはありますか?
search - lucene はドキュメントの交差をどのように高速に計算するのですか?
これを可能にするストレージと検索の内部構造は何ですか? 核心のように?
たとえば、ある用語に一致する 100 万のドキュメントと、AND クエリの 2 番目の用語に一致するその他の 100 万のドキュメントがあるとします。lucene はどのように交差を高速に行ってトップ k を取得するのですか?
用語ごとにドキュメントIDSの昇順でドキュメントを保存していますか? 次に、2 つのタームのドキュメントを交差させる必要がある場合、両方のセットを 1 回のパスで段階的に反復することにより、両方のセットで最初に共通する k 個のドキュメントを探します。
それとも、より大きなドキュメント配列からの単純な順序付けられていないハッシュ セットを使用して、共通ドキュメントを検索しますか?
または、ユーザーが要求するドキュメントの数、個々の用語に一致するドキュメントなどに応じて、そのような(またはそれ以上の)タイプの交差ポリシーが使用されますか?
ドキュメント配列のマージの核心を指摘できる記事があれば、歓迎します。
編集:情報をありがとう。今では理にかなっています。スキップリストは魔法のようです。明確な理解を得るために、さらに掘り下げます。
mysql - XML の解析、データベースへの入力、およびテキストのインデックス作成
XML ファイルを解析し、解析された値をデータベースに直接入力して、データベースにデータを入力しようとしています。約 1000 個の XML ファイルと膨大なテキスト データがあります。データベースにデータを入力する際にフルテキスト インデックスを使用したいと考えており、そのために mysql テキスト インデックスを使用しています。データベースにデータを入力している間にインデックスを作成するのが良いのか、それとも最初にデータベースにデータを入力してからインデックスを作成するのが良いのか知りたいです。1 つのファイルを解析してデータベースに入力するのに 1 日かかると思うからです。