2009-06-09 11 views
1

エルシャドはこちらです。私はルセンに取り組んでいます。 今、私は単語を検索することができます。しかし、単語の一部を入力すると、結果を得ることができません。 あなたは何をすべきかをplsできますか?luceneを使って単語の一部を検索する方法は?

は、インデックスのために、私は以下のコードを使用しています、以下のコード検索のための

writer = new IndexWriter(directory, new StandardAnalyzer(), true); 
writer.SetUseCompoundFile(true); 

doc.Add(Field.UnStored("text", parseHtml(html))); 
doc.Add(Field.Keyword("path", relativePath)); 
writer.AddDocument(doc); 

を使用しています。

Query query = QueryParser.Parse(this.Query,"text",new StandardAnalyzer()); 

// create the result DataTable 
this.Results.Columns.Add("title", typeof(string)); 
this.Results.Columns.Add("sample", typeof(string)); 
this.Results.Columns.Add("path", typeof(string)); 

// search 
Hits hits = searcher.Search(query); 

this.total = hits.Length(); 

答えて

6

あなたはthe Lucene Query Parser Syntax documentationを参照する場合、あなたが特定の文字列で始まるすべてのそれらの単語を一致させるために、クエリの末尾にアスタリスク(*)を追加することができていることがわかります。たとえば、 "caterpillar"と "catamaran"の両方に言及した結果を得たいとします。検索クエリは "cat *"になります。

しかし、検索クエリを直接制御していない場合(たとえば、ユーザーが独自の検索クエリを入力している場合など)は、QueryParserの部分でちょっとしたトリッキーが必要になることがあります。私の経験は、Java版のLuceneだけです。うまくいけば、原則はLucene.NETと同じです。

Javaでは、QueryParserクラスを拡張し、そのnewTermQuery(Term)メソッドをオーバーライドできます。従来、このメソッドはTermQueryオブジェクトを返します。ただし、子クラスは代わりにPrefixQueryを返します。例:

Lucene.NETでどのような方法を上書きできるかはあまりよく分かりませんが、似たようなものでなければなりません。 its documentationを見ると、GetFieldQueryというメソッドがあると表示されます。the QueryParser classおそらくこれはあなたが上書きしなければならない方法です。

+0

こんにちはアダム、 お返事ありがとうございます。 ドキュメントリンクをありがとう。私はこれを試し、あなたに返信します。 –

+1

ドキュメントのリンクが壊れています – irperez

関連する問題