Bra*_*don 9 c# lucene indexing lucene.net
我使用Lucene.Net 2.0来索引数据库表中的某些字段.其中一个字段是"名称"字段,允许使用特殊字符.当我执行搜索时,它找不到包含带有特殊字符的术语的文档.
我将我的字段编入索引:
Directory DALDirectory = FSDirectory.GetDirectory(@"C:\Indexes\Name", false);
Analyzer analyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(DALDirectory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
Document doc = new Document();
doc.Add(new Field("Name", "Test (Test)", Field.Store.YES, Field.Index.TOKENIZED));
indexWriter.AddDocument(doc);
indexWriter.Optimize();
indexWriter.Close();
Run Code Online (Sandbox Code Playgroud)
我搜索以下内容:
value = value.Trim().ToLower();
value = QueryParser.Escape(value);
Query searchQuery = new TermQuery(new Term(field, value));
Searcher searcher = new IndexSearcher(DALDirectory);
TopDocCollector collector = new TopDocCollector(searcher.MaxDoc());
searcher.Search(searchQuery, collector);
ScoreDoc[] hits = collector.TopDocs().scoreDocs;
Run Code Online (Sandbox Code Playgroud)
如果我将字段搜索为"名称"并将值作为"测试",则会找到该文档.如果我执行与"名称"相同的搜索并将值作为"测试(测试)",则它找不到该文档.
更奇怪的是,如果我删除QueryParser.Escape行搜索GUID(当然,包含连字符),它会找到GUID值匹配的文档,但执行相同的搜索,其值为'Test(Test) '仍然没有结果.
我不确定我做错了什么.我使用QueryParser.Escape方法来转义特殊字符并存储字段并通过Lucene.Net的示例进行搜索.
有什么想法吗?