0

小さなデータベースに NexusDB を使用しています。FulltextIndex が定義されたテーブルがあります。インデックスは、次のオプションで構成されます。

  • 文字区切り
  • cc句読点ダッシュ
  • cc句読点その他

ユーザーが編集ボックスに検索テキストを入力すると、次の WHERE 句で SQL ステートメントが作成されます (%s はもちろん Editbox.text に置き換えられます)。

WHERE CONTAINS(FullIdx, ''%s'')

ユーザーが編集ボックスに複数の単語を入力すると、次のように 2 つの別個の単語が WHERE 句に埋め込まれている必要があるため、これはうまくいきません。

WHERE CONTAINS(FullIdx, 'word1' and 'word2')

したがって、テキストボックスの値を解析し、スペースをスキャンして、それらのポイントでテキストを分割する必要があります。そのため、fulltextindex の実際の定義を使用して正しい where 句を作成し、fulltextindex の設定ごとに検索テキストを解析できるかどうか疑問に思いました。

そのため、FulltextIndex 定義で ccPunctuationDash が有効になっている場合、検索テキストも「-」で分割されます。

考えてみれば、インデックスが作成されてすべての文字列がトークン化されるときとまったく同じプロセスです...

私の質問: FULLtextIndex の設定に従って検索文字列をトークン化する最も簡単な方法は何ですか?

4

1 に答える 1

4

最も簡単な方法は...実際のテーブルと同じフルテキスト インデックス設定で、文字列フィールドを持つ空の #temporary テーブルを作成することです。を含めるように設定TnxTable.OptionsしますdsoAddKeyAsVariantField。トークン化する文字列を文字列フィールドに読み込み、フルテキスト インデックスによってインデックス付けされたテーブルを表示します。さきほど、ソートされたトークンである追加のフィールドが表示されます。テーブルを反復処理してトークンを読み取ることができるようになりました。

于 2013-01-30T03:07:36.363 に答える