如何在文本中使用字符“ /”进行搜索?在LUCENE 4(在版本3中有效)中,我描述了测试
Lucene 4索引
分析器:StandAnalizer
实物价值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4搜索
搜索"01/02/05"
,其中TermQuery
= 0次
搜索"01/02*"
,其中WildCardQuery
= 0次
搜索"01"
,其中TermQuery
= 3次点击
搜索"01**"
,其中WildCardQuery
= 0次
Lucene 3索引
分析器:StandAnalizer
实物价值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 3搜索
搜索"01/02/05"
,其中TermQuery
= 1次匹配
搜索"01/02*"
,其中WildCardQuery
= 3次点击
搜索"01"
,其中TermQuery
= 0次
搜索"01**"
,其中WildCardQuery
= 3次点击
Lucene 3索引
分析器:StandAnalizer
实物价值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4搜索
搜索"01/02/05"
,其中TermQuery
= 1次匹配
搜索"01/02*"
,其中WildCardQuery
= 3次点击
搜索"01"
,其中TermQuery
= 0次
搜索"01**"
,其中WildCardQuery
= 3次点击
注意:搜索全文并测试环境
Lucene 4索引
分析器:StandAnalizer
实物价值
"01\/02\/03"
"01\/02\/04"
"01\/02\/05"
Lucene 4搜索
搜索"01/02/05"
,其中TermQuery
= 0次
搜索"01/02*"
,其中WildCardQuery
= 0次
搜索"01"
,其中TermQuery
= 3次点击
搜索"01**"
,其中WildCardQuery
= 0次
Lucene 4索引
分析器:StandAnalizer
实物价值
"01\/02\/03"
"01\/02\/04"
"01\/02\/05"
Lucene 4搜索
搜索"01\/02\/05"
,其中TermQuery
= 0次
搜索"01\/02*"
,其中WildCardQuery
= 0次
搜索"01"
,其中TermQuery
= 3次点击
搜索"01**"
,其中WildCardQuery
= 0次
Lucene 4索引
分析器:StandAnalizer
实物价值
"01/02/03"
"01/02/04"
"01/02/05"
Lucene 4搜索
搜索"01\/02\/05"
,其中TermQuery
= 0次
搜索"01\/02*"
,其中WildCardQuery
= 0次
搜索"01"
,其中TermQuery
= 3次点击
搜索"01**"
,其中WildCardQuery
= 0次
答案 0 :(得分: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());
}
}
}
}