2009-07-06 6 views
3

Lucene検索エンジンを使用していますが、用語の冒頭に一致するものだけが見つかるようです。Luceneを使用して単一の用語内で一致するものを見つける方法

例: "one"を検索すると、 "onematch"または "one day a time"と一致しますが、 "loneranger"では一致しません。

Lucene docは、検索文字列の前でワイルドカードをサポートしていないと言っているので、Luceneがインタータームマッチを検索するのか、検索タームで始まるドキュメントのみ一致するのかはわかりません。

インデックスの作成方法、検索クエリの作成方法、またはLuceneの制限事項に問題がありますか?

答えて

3

は、あなたがあなたの検索時にワイルドカードをリードできるように、あなたのクエリパーサにSetAllowLeadingWildcardCharactersプロパティを設定することができますスタックオーバーフロー上、ここで別のポストではいくつかの情報[LUCENE.NET] Leading wildcard throws an error"

を発見しました。もちろんこれは明らかにパフォーマンスに大きな影響を与えますが、ユーザーは検索語句内で一致するものを見つけることができます。

0

Luceneは検索用語がその中のどこにも表示されてもドキュメントを見つけることができますが、検索用語の前にワイルドカードがある場合はワイルドカードクエリを実行できません。それが気になる機能であれば、は低レベルのLuceneハッキングを行う必要があります設定フラグを変更する(興味深いリンクに感謝します)、既にそのハッキングを行っているサードパーティのライブラリを見つけるか、異なる検索実装(十分なデータセットが少ない場合、多くのRDBMSエンジンからの組み込み検索で十分です)。

0

あなたのクエリがあるべき

"クエリのクエリ=新しいWildcardQuery(新しい用語(" コンテンツ "" * 1 * "));"

ここで、contentsは検索するフィールド名です。

"one"はアスタリスクで囲む必要があります。私は* 1の後にクエリにスペースを与えましたが、スペースがあってはいけません。スペースなし*が表示されていないので、私は星を追加しました。

関連する問題