0

バックグラウンド

ギリシャ文字を含む検索インデックスがあります。多くの人はギリシャ語の入力方法を知らないので、「ベータコード」と呼ばれるものを入力します。ベータコードはギリシャ語に変換できます。たとえば、ベータコード「NO/MOU」は「νόμου」に変換されます。スラッシュや括弧などの文字は、アクセントを示すために使用されます。

望ましい行動

ユーザーがギリシャ文字のベータコードまたはテキストを使用して検索できるようにしたいと思います。私は、Whooshバリエーションクラスが必要なメカニズムを提供し、それが私の問題をほぼ解決することを理解しました。

問題

スラッシュまたは括弧を使用してユーザーのクエリのアクセントを示す場合を除いて、Variationクラスは適切に機能します。問題は、アクセントを示すために使用される特殊文字が単語を分割する結果になるようにクエリが解析されることです。たとえば、「NO / MOU」を検索すると、Variationsクラスは、「NO/MOU」ではなく「no」と「mou」のバリエーションを見つけるように求められます。

質問

検索ワードにスラッシュと括弧が含まれるように、クエリの解析方法に影響を与える方法はありますか(つまり、「NO / MOU」を検索すると、「NO/MOU」ではなく「NO/MOU」のトークンが検索されます。 no」と「mou」)?

4

1 に答える 1

1

検索パーサーは、Tokenizer クラスを使用して、検索文字列を個々の用語に分割します。Whoosh は、スキーマに関連付けられているクラスを使用します。たとえば、次の場合、「コンテンツ」フィールドを検索するときに SimpleAnalyzer() が使用されます。

Schema( verse_id = NUMERIC(unique=True, stored=True),
        content  = TEXT(analyzer=SimpleAnalyzer()) )

デフォルトでは、SimpleAnalyzer() は次の正規表現を使用して検索語をトークン化します: "\w+(.?\w+)*"

別の正規表現を使用するには、SimpleAnalyzer の最初の引数を別の正規表現に割り当てます。たとえば、ベータ コード文字 (スラッシュ、括弧など) をトークンに含めるには、次の SimpleAnalyzer を使用します。

SimpleAnalyzer( rcompile(r"[\w/*()=\+|&']+(\.?[\w/*()=\+|&']+)*") )

検索では、用語に特別なベータコード文字を含めることができるようになり、Variations クラスは用語を Unicode バージョンに変換できるようになります。

于 2013-02-18T21:52:45.440 に答える