2011-08-10 25 views
0

検索結果に特殊なルーネン文字が含まれているlucene.netでフルテキスト検索を実行する際に問題が発生しました。Lucene.netに特殊文字を含む完全なフレーズ

Luceneのドキュメントに「content」という名前のフィールドがあります。このフィールドは、次のように作成され、インデックスされたドキュメントの内容を含みます。

document.Add(new Field("content", fulltext, Field.Store.YES, Field.Index.ANALYZED)); 

インデックスを作成するには、Standardanalyzerを使用しています。

var queryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "content", analayzer); 
queryParser.SetAllowLeadingWildcard(true); 
queryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE); 
Query fullTextQuery = queryParser.Parse(queryString); 

は、クエリが、その後IndexSearcherから結果を取得するために使用されているBooleanQueryに追加されます。

は、インデックスを照会するために、私は次のコードを使用しています。私はコードの残りの部分がそれほど重要ではないと思います。なぜなら、コードは99%のクエリのように機能するからです。私はまた、インデックスを照会するためにStandardAnalyzerを使用しています。

ここに問題があります。 ときどき文書の「コンテンツ」フィールドが使用して分離されたテキストが含まれています「 - 」

いくつかのテキスト一部のテキストセレクターレバーいくつかのテキスト一部のテキスト

今私がフルをやっているとき「セレクターレバー」を使用したテキスト検索(完全なフレーズ)。クエリは次のようになります。

内容:「セレクターレバー」

が見つからすべきではありませんが、ここでの問題は、上記のテキストを含む文書が、発見されていることを2つのワード理由空白ではなく " - "を使用して区切られます。

私はそれが分析装置と関係していると思います。 " - "はluceneの特殊文字です。

誰かがこの問題を解決するのに役立つかもしれません。事前 で

おかげマーティン

答えて

0

あなたは問題はあなたがインデックス時に使用しているアナライザであることを考えるには正しいです。 Lucene javadocsから

これは、ほとんどのヨーロッパ言語の文書のための良好なトークナイザでなければなりませんJFlex

で構成文法ベースのトークナイザ:句読点で

  • スプリット言葉、句読点を削除する。しかし、空白文字に従わないドットはトークンの一部とみなされます。
  • トークンに数字がない限り、ハイフンで単語を分割します。この場合、トークン全体が製品番号として解釈され、分割されません。
  • 電子メールアドレスとインターネットホスト名を1つのトークンとして認識します。

多くのアプリケーションでは、特定のトークナイザが必要です。このトークナイザがアプリケーションに合っていない場合は、このソースコードディレクトリをプロジェクトにコピーし、独自の文法ベースのトークナイザを維持することを検討してください。

したがって、あなたのケースであなただけの空白で分割WhitespaceAnalyzerのような、より厳格な分析とインデックスにあなたの書類が必要でしょう。

+0

4年後の質問です。標準アナライザは句読点を削除するので、検索の際には、句読点も削除されます。これにより、強調表示され、単語の最後/最初の句読点を無視します。 WhitespaceAnalyzerを使用して検索結果を制限したいとは思わない。強調表示されていない単語の最後の句読点を克服する方法に関するアイデアはありますか? – JenonD

+0

@JenonD私はあなたを助けることができないと思っています。私はあなたが好きなら、新しい質問を投稿し、これを参照することをお勧めします。 – smerchek

関連する問題