2012-02-13 13 views
2

保存されたURLフィールドのLucene.netインデックスを検索したいとします。私のコードは以下の通りです:URLフィールドのLucene.Netインデックスの検索

Field urlField = new Field("Url", url.ToLower(), Field.Store.YES,Field.Index.TOKENIZED); 
document.Add(urlField);` 
indexWriter.AddDocument(document); 

私は上記のコードをインデックスに書き出しています。

インデックスのURLを検索するには、次のコードを使用します。

Lucene.Net.Store.Directory _directory = FSDirectory.GetDirectory(Host, false); 
IndexReader reader = IndexReader.Open(_directory); 
KeywordAnalyzer _analyzer = new KeywordAnalyzer(); 
IndexSearcher indexSearcher = new IndexSearcher(reader); 
QueryParser parser = new QueryParser("Url", _analyzer); 
Query query = parser.Parse("\"" + downloadDoc.Uri.ToString() + "\""); 
TopDocs hits = indexSearcher.Search(query, null, 10); 
if (hits.totalHits > 0) 
{ 
    //statements.... 
} 

しかし、私は、例えば、URLを検索するたびに:http://www.xyz.com/、私は任意のヒットを得ていないのです。

どういうわけか、代替案を見つけました。しかし、これは索引に1つの文書しかない場合にも機能します。ドキュメントがさらにある場合、以下のコードでは正しい結果が得られません。何か案は? Plsは、インデックスを書きながら

を助けるも探しながらKeywordAnalyzer()

KeywordAnalyzer _analyzer = new KeywordAnalyzer();  
indexWriter = new IndexWriter(_directory, _analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); 

を使用し、これが原因KeywordAnalyzer "トークン化" 全体でKeywordAnalyzer()

IndexReader reader = IndexReader.Open(_directory); 
KeywordAnalyzer _analyzer = new KeywordAnalyzer(); 
IndexSearcher indexSearcher = new IndexSearcher(reader); 
QueryParser parser = new QueryParser("Url", _analyzer); 
Query query = parser.Parse("\"" + url.ToString() + "\"");      
TopDocs hits = indexSearcher.Search(query, null, 1); 

を使用単一のトークンとして としてストリームします。

助けてください。緊急です。

乾杯 スニル...

+0

のLuceneは、値を格納していない、インデックス付きの値と一致しました。どのようにフィールドのインデックスを作成していますか? – sisve

+0

_analyzerは何をしていますか? – SharpBarb

+0

URLがすでに索引に登録されているかどうかを検索したい。はいの場合、私はそれの格納された "コンテンツ"を置き換えています。 URLは任意の形式(http:// www.xyz.com/'http:// www.xyz.com/page1 /'など)にすることができます。 _analyzerはStandardAnalyzerです –

答えて

1

これが私の仕事:

IndexReader reader = IndexReader.Open(_directory);     
IndexSearcher indexSearcher = new IndexSearcher(reader); 
TermQuery tq= new TermQuery(new Term("Url", downloadDoc.Uri.ToString().ToLower()));     
BooleanQuery bq = new BooleanQuery(); 
bq.Add(tq, BooleanClause.Occur.SHOULD); 
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true); 

使用StandardAnalyzerインデックスに書き込み中。

この答えは私を助け:Lucene search by URL

0

は例えば、クエリの前後に引用符を入れてみてください。

"http://www.google.com/"

+0

私の質問を編集しました。今すぐご確認ください。 –

0

空白やキーワードアナライザは動作するはずの使用:このように。

誰でも実際に「http://www.Google.com」を検索しますか?ユーザーが代わりに「Google」を検索する可能性が高いと思われます。

URLの一部が一致している場合は、常にURL全体を返すことができます。標準のアナライザーは、URLの検索と検索に適しているはずです。

+0

URLがすでに索引付けされているかどうかを検索したい。はいの場合、私はそれの "内容"を置き換えています。 URLはどんな形式でもよい:http://www.xyz.com/ http://www.xyz.com/page1/など。 –

+0

'フィールドurlField =新しいフィールド(" URL "、url.ToLower( )、Field.Store.YES、Field.Index.TOKENIZED); 'document.Add(urlField);' 'indexWriter.AddDocument(document); ' –

+0

私の質問を編集しました。今すぐご確認ください。 –

関連する問題