問題タブ [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.

0 投票する
6 に答える
22685 参照

php - 複数の針を持つstrpos()?

2つの重要な違いがあるstrpos()のような関数を探しています。

  1. 複数の針を受け入れることができるようにするため。私は1つで何千もの針を意味します。
  2. 干し草の山の中の針のすべての出現を検索し、開始位置の配列を返すため。

もちろん、それはすべての針をループするだけでなく、効率的な解決策でなければなりません。私はこのフォーラムを検索しましたが、次のような同様の質問がありました。

しかし、それらのネザーは私が探していたものでした。私は自分の質問をよりよく説明するためにstrposを使用しています。おそらく、この目的のためにまったく異なるものを使用する必要があります。

私はZend_Search_Luceneを知っていますが、これを実現するために使用できるかどうか、そしてどのように(一般的な考え方)に興味がありますか?

あなたの助けと時間をどうもありがとう!

0 投票する
1 に答える
392 参照

php - 3列でMATCHを検索するMySQLクエリ?

列のフルテキストインデックスを作成しましたCity, Group and Textcity_group_text_comparator

3つすべての文字列を検索する簡単なクエリを実行するにはどうすればよいですか?

私はこれを試しました:

結果をどのように並べ替えますか?

ありがとう

0 投票する
2 に答える
115 参照

html - HTML の一部をインデックスに登録しない

ページ コンテンツの関連性を高めるために HTML のインデックス作成を制限する方法はありますか? たとえば、ロボットからメニューなどを除外します。昔、これ専用のタグをいくつか見た記憶がありますが、情報が見つかりませんでした。

検索エンジンはそのような方法をどのようにサポートしていますか (Google/Bing)?

0 投票する
1 に答える
163 参照

sql - SQLServerフルテキストインデックスはすべてのデータを返すわけではありません

私のテーブルには、次のような列に格納されているデータモデルpublicationDateとして設定された公開日という列があります。NVarChar

これを使用してSQLからクエリを取得すると、このテーブルにフルテキストインデックスが作成されました。

戻ってきたばかりです:

しかし戻らない2008-10-23

では、どうすればを含むすべてのデータを取得できます2008か?

0 投票する
4 に答える
11942 参照

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

でインデックスを作成しAB私が知る限り、でインデックス検索を実行する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)

0 投票する
1 に答える
570 参照

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 インデックスの再構築を待っている可能性があると推測した理由です。

0 投票する
2 に答える
6986 参照

java - Java用の全文検索ソリューション?

さまざまな種類のエンティティの大規模なセットがあります。

タスクは、このセットの全文検索を実装することです。全文検索とは、探している部分文字列を含むエンティティを取得する必要があることを意味します(正確なプロパティ、この部分文字列が存在する場所の正確なオフセットなどを知る必要はありません)。現在の実装では、Entityインターフェースには次のメソッドがありますmatches(String)

各エンティティクラスは、その内部に応じてそれを実装します。

このアプローチは本当にひどいものだと思います(ただし、機能します)。新しいセットがあるたびに、Luceneを使用してインデックスを作成することを検討しています。インデックスとは、コンテンツ->IDマッピングを意味します。内容は、私が検討しているすべてのフィールドのほんの些細な「合計」です。したがって、Entity1コンテンツはとの連結にfield1()なりfield2()ます。パフォーマンスについては疑問があります。インデックスの作成は非常にコストのかかる操作であることが多いため、それが役立つかどうかはわかりません。

他に何か提案はありますか?

詳細を明確にするには:

  1. Set<Entity> entities = ...〜10000アイテムです。
  2. Set<Entity> entities = ...DBから読み取られないので、where ...条件を追加するだけでは不十分です。データソースは非常に重要なので、私はその側で問題を解決することはできません。
  3. Entities短い記事のように考える必要があるため、一部のフィールドは最大10KBである場合があり、他のフィールドは最大10バイトである場合があります。
  4. この検索は頻繁に実行する必要がありますが、クエリ文字列と元のセットの両方が毎回異なるため、インデックスを1回だけ作成することはできないようです(エンティティのセットは毎回異なるため)。
0 投票する
1 に答える
1902 参照

mysql - MyISAM の FullText INDEXING が非常に遅い

私はテーブルを持っています

これには約10万件のレコードがあります。

このテーブルは、約 8k のレコードを持つ LOAD DATA INFILE で 1 時間ごとに更新されます。

テーブルがロックされる時間は約 30 秒です。私が作る時間に対応する

私の問題は、30 秒が本当に長いことです。このテーブルは 5 回/秒クエリされるため、キューは 30 x 5 = 150 に達します。最大接続制限が 100 に設定されているため、mysql サーバーは一部の受信接続を拒否し始めます。

将来的には、このテーブルに少なくとも 100 万行を追加する予定ですが、これ以上速くなることはないと思います。

mysql がインデックスの更新に使用する時間を短縮するためにできることはありますか?

0 投票する
3 に答える
2115 参照

search - lucene はドキュメントの交差をどのように高速に計算するのですか?

これを可能にするストレージと検索の内部構造は何ですか? 核心のように?

たとえば、ある用語に一致する 100 万のドキュメントと、AND クエリの 2 番目の用語に一致するその他の 100 万のドキュメントがあるとします。lucene はどのように交差を高速に行ってトップ k を取得するのですか?

用語ごとにドキュメントIDSの昇順でドキュメントを保存していますか? 次に、2 つのタームのドキュメントを交差させる必要がある場合、両方のセットを 1 回のパスで段階的に反復することにより、両方のセットで最初に共通する k 個のドキュメントを探します。

それとも、より大きなドキュメント配列からの単純な順序付けられていないハッシュ セットを使用して、共通ドキュメントを検索しますか?

または、ユーザーが要求するドキュメントの数、個々の用語に一致するドキュメントなどに応じて、そのような(またはそれ以上の)タイプの交差ポリシーが使用されますか?

ドキュメント配列のマージの核心を指摘できる記事があれば、歓迎します。

編集:情報をありがとう。今では理にかなっています。スキップリストは魔法のようです。明確な理解を得るために、さらに掘り下げます。

0 投票する
0 に答える
264 参照

mysql - XML の解析、データベースへの入力、およびテキストのインデックス作成

XML ファイルを解析し、解析された値をデータベースに直接入力して、データベースにデータを入力しようとしています。約 1000 個の XML ファイルと膨大なテキスト データがあります。データベースにデータを入力する際に​​フルテキスト インデックスを使用したいと考えており、そのために mysql テキスト インデックスを使用しています。データベースにデータを入力している間にインデックスを作成するのが良いのか、それとも最初にデータベースにデータを入力してからインデックスを作成するのが良いのか知りたいです。1 つのファイルを解析してデータベースに入力するのに 1 日かかると思うからです。