1

私のアプリケーションには、名前フィールドが の Company があり、This is a testLucene.Net によって正しくインデックス化されています。参考までに、 myMultiFieldQueryParserのデフォルトの演算子は に設定されていますQueryParser.Operator.AND

と を検索するthis test~と、検索に合格しthis tst~ます。this~ test~ただし、 、thas~ test~thas test~、およびその他のバリエーションを検索しようとすると、検索に失敗します。

この全体的な目的は、ユーザーが検索のスペルを少し間違えることを許可することです。そのため、ユーザーが検索しJon Doeても の結果が表示されJohn Doe、ユーザーがデータベースに入力したものの正確なスペルを思い出せなくなります。残念ながら、検索フレーズの最後の用語に対するあいまい検索のみが許可されているようです。何か間違ったことをしていますか、それとも別のアナライザー全体を使用する必要がありますか?

4

1 に答える 1

5

私は最近、私のプロジェクトに似たようなものを実装しなければなりませんでした。

フレーズを複数のセグメントに分割し、クエリを手動で作成することになりました。

var input = "This is a test";

var fieldName = "yourField";
var minimumSimilarity = 0.5f;
var prefixLength = 3;
var query = new BooleanQuery();

var segments = input.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries);
foreach (var segment in segments)
{
    var term = new Term(fieldName, segment);
    var fuzzyQuery = new FuzzyQuery(term, minimumSimilarity, prefixLength);
    query.Add(fuzzyQuery, BooleanClause.Occur.SHOULD);
}

非常に原始的ですが、うまくいくようです。

注: これは Lucene.net v2.3.1.3 に対してのみテストされています。

于 2011-05-13T11:09:42.997 に答える