2012-01-02 17 views
0

フレーズ検索では、完全一致(ストップワードを無視しない)の場合にのみ結果を表示します。フレーズでない検索の場合は、単語のルートフォームなどが一致しても結果を表示できます。フィールド数を増やさずにluceneを使用した完全なフレーズ検索

現在のところ、standardTokenizer、StopFilter、PorterStemFilter、LowerCaseFilterでデータを渡しています。これにより、ユーザが「パスワード管理」を検索したい場合には、「パスワード管理者」を含む検索結果が表示される。

私がStemFilterを削除した場合、語句以外のクエリの単語のルートフォームを照合することはできません。ドキュメント内の2つのフィールドの一部と同じデータにインデックスを付ける必要があると私は考えていました。

私はDifferent indexing and search strategies on same field without doubling index size?で同じ質問をしました。しかし、オフィスにいる人は、2つのフィールドの一部として同じデータを索引付けすることに満足していません。 (私たちは現在、lucene文書に約20のテキストフィールドを持っています)。 TokenFiltersを使用して上記の両方のケースをサポートする方法はありますか?

StopFilterの場合、入力トークンと? (無視された単語のために)同じ位置増分で。 StemFilterの場合も同様に、入力トークンとステムトークンの両方を同じ位置増分で出力します。基本的には、入力トークンと出力トークン(無視されたものでも)は同じ位置にあります。

このアプローチを進めるのは安全ですか?他の誰かがここに記載された要件に直面していますか?私のアプローチで言及したのと同様のことをするフィルタはすぐに利用できますか?

ありがとうございました

答えて

1

"入力と出力のトークン"の意味を理解できません。データを2回保存していますか?

2度保存しないと、私はあなたの方法がうまくいかないと思います。格納された単語がjumpingであり、jumpedを検索するとします。クエリパーサーはjumpjumpedを出力できますが、jumpという値が格納されていない限り、依然としてjumpingと一致しません。

そして、もしあなたが一度だけ茎ではなく、一度非茎になったとしても、それを2つのフィールドに保存しないのはなぜですか?そうすれば、奇妙なトークナイザの変更に対処する必要はありません。

+0

@Xodarp:ええ、2つのフィールドを使わずに2回保存することを計画しています(アプリのクエリ言語をLuceneクエリに変換するときに単純化する)。これが検索エンジンの実装方法であるかどうか分かりますか?ありがとう – naresh

+0

ほとんどの検索エンジンは、ストレージが安価で待ち時間が高価であるとの意見を持っているので、重複して物を保管するルートに行く傾向があります。 Googleが複数のフィールド(あるいは「フィールド」のアイデア)を持っているかどうかは言えませんでした。 – Xodarap

+1

私は、これらのトークナイザの変更を行う場合は、ハイライトなどのあらゆる問題を抱えています。翻訳を行うよりLuceneのコードをマングリングする方が本当に簡単かどうかについて慎重に考えてください。 – Xodarap

関連する問題