保存された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);
を使用単一のトークンとして としてストリームします。
助けてください。緊急です。
乾杯 スニル...
のLuceneは、値を格納していない、インデックス付きの値と一致しました。どのようにフィールドのインデックスを作成していますか? – sisve
_analyzerは何をしていますか? – SharpBarb
URLがすでに索引に登録されているかどうかを検索したい。はいの場合、私はそれの格納された "コンテンツ"を置き換えています。 URLは任意の形式(http:// www.xyz.com/'http:// www.xyz.com/page1 /'など)にすることができます。 _analyzerはStandardAnalyzerです –