用'/'字符搜索-[LUCENE.NET 4]
search whit '/' character-[LUCENE.NET 4]
如何在文本中使用字符'/'进行搜索?在 LUCENE 4 中(在版本 3 中有效)我描述了测试
测试1
Lucene 4 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4 搜索
搜索"01/02/05"
whit TermQuery
= 0 次点击
搜索"01/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
测试2
Lucene 3 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 3 搜索
搜索"01/02/05"
whit TermQuery
= 1 次点击
搜索 "01/02*"
whit WildCardQuery
= 3 次点击
搜索"01"
whit TermQuery
= 0 次点击
搜索"01**"
whit WildCardQuery
= 3 次点击
test3
Lucene 3 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4 搜索
搜索"01/02/05"
whit TermQuery
= 1 次点击
搜索 "01/02*"
whit WildCardQuery
= 3 次点击
搜索"01"
whit TermQuery
= 0 次点击
搜索"01**"
whit WildCardQuery
= 3 次点击
注意:搜索全文并测试whit scape
测试4
Lucene 4 索引
分析器:StandAnalizer
实测值
"01\/02\/03"
"01\/02\/04"
"01\/02\/05"
Lucene 4 搜索
搜索"01/02/05"
whit TermQuery
= 0 次点击
搜索"01/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
测试5
Lucene 4 索引
分析器:StandAnalizer
实测值
"01\/02\/03"
"01\/02\/04"
"01\/02\/05"
Lucene 4 搜索
搜索"01\/02\/05"
whit TermQuery
= 0 次点击
搜索"01\/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
test6
Lucene 4 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4 搜索
搜索"01\/02\/05"
whit TermQuery
= 0 次点击
搜索"01\/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
TermQuery
和 SimpleAnalyzer
效果很好。我正在使用 Lucene.Net.4.8.0-beta00005。这是一个例子:
[TestMethod]
public void SearchByDate()
{
using (RAMDirectory directory = new RAMDirectory())
{
using (SimpleAnalyzer analyzer = new SimpleAnalyzer(LuceneVersion.LUCENE_48))
{
IndexWriterConfig config = new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer);
Document[] documents = new Document[]
{
new Document { new StringField("Date", "01/02/03", Field.Store.YES), },
new Document { new StringField("Date", "01/02/04", Field.Store.YES), },
new Document { new StringField("Date", "01/02/05", Field.Store.YES), },
};
using (IndexWriter writer = new IndexWriter(directory, config))
foreach (Document document in documents)
writer.AddDocument(document);
using (DirectoryReader reader = DirectoryReader.Open(directory))
{
IndexSearcher searcher = new IndexSearcher(reader);
TermQuery query = new TermQuery(new Term("Date", "01/02/04"));
ScoreDoc[] hits = searcher.Search(query, 10).ScoreDocs;
Assert.AreEqual(1, hits.Length);
Document doc = searcher.Doc(hits.First().Doc);
Assert.AreEqual("01/02/04", doc.Fields.FirstOrDefault(x => x.Name == "Date").GetStringValue());
}
}
}
}
如何在文本中使用字符'/'进行搜索?在 LUCENE 4 中(在版本 3 中有效)我描述了测试
测试1
Lucene 4 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4 搜索
搜索"01/02/05"
whit TermQuery
= 0 次点击
搜索"01/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
测试2
Lucene 3 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 3 搜索
搜索"01/02/05"
whit TermQuery
= 1 次点击
搜索 "01/02*"
whit WildCardQuery
= 3 次点击
搜索"01"
whit TermQuery
= 0 次点击
搜索"01**"
whit WildCardQuery
= 3 次点击
test3
Lucene 3 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4 搜索
搜索"01/02/05"
whit TermQuery
= 1 次点击
搜索 "01/02*"
whit WildCardQuery
= 3 次点击
搜索"01"
whit TermQuery
= 0 次点击
搜索"01**"
whit WildCardQuery
= 3 次点击
注意:搜索全文并测试whit scape
测试4
Lucene 4 索引
分析器:StandAnalizer
实测值
"01\/02\/03"
"01\/02\/04"
"01\/02\/05"
Lucene 4 搜索
搜索"01/02/05"
whit TermQuery
= 0 次点击
搜索"01/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
测试5
Lucene 4 索引
分析器:StandAnalizer
实测值
"01\/02\/03"
"01\/02\/04"
"01\/02\/05"
Lucene 4 搜索
搜索"01\/02\/05"
whit TermQuery
= 0 次点击
搜索"01\/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
test6
Lucene 4 索引
分析器:StandAnalizer
实测值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4 搜索
搜索"01\/02\/05"
whit TermQuery
= 0 次点击
搜索"01\/02*"
whit WildCardQuery
= 0 次点击
搜索"01"
whit TermQuery
= 3 次点击
搜索"01**"
whit WildCardQuery
= 0 次点击
TermQuery
和 SimpleAnalyzer
效果很好。我正在使用 Lucene.Net.4.8.0-beta00005。这是一个例子:
[TestMethod]
public void SearchByDate()
{
using (RAMDirectory directory = new RAMDirectory())
{
using (SimpleAnalyzer analyzer = new SimpleAnalyzer(LuceneVersion.LUCENE_48))
{
IndexWriterConfig config = new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer);
Document[] documents = new Document[]
{
new Document { new StringField("Date", "01/02/03", Field.Store.YES), },
new Document { new StringField("Date", "01/02/04", Field.Store.YES), },
new Document { new StringField("Date", "01/02/05", Field.Store.YES), },
};
using (IndexWriter writer = new IndexWriter(directory, config))
foreach (Document document in documents)
writer.AddDocument(document);
using (DirectoryReader reader = DirectoryReader.Open(directory))
{
IndexSearcher searcher = new IndexSearcher(reader);
TermQuery query = new TermQuery(new Term("Date", "01/02/04"));
ScoreDoc[] hits = searcher.Search(query, 10).ScoreDocs;
Assert.AreEqual(1, hits.Length);
Document doc = searcher.Doc(hits.First().Doc);
Assert.AreEqual("01/02/04", doc.Fields.FirstOrDefault(x => x.Name == "Date").GetStringValue());
}
}
}
}