搜索“ /”字符-[LUCENE.NET 4]

时间:2019-04-23 16:53:43

标签: lucene.net

如何在文本中使用字符“ /”进行搜索?在LUCENE 4(在版本3中有效)中,我描述了测试

test1

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次

test2

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次点击

test3

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次点击

注意:搜索全文并测试环境

test4

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次

test5

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次

test6

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次

1 个答案:

答案 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());
            }
        }
    }
}