Lucene.net търсене по числова стойност (като низ)

Индексирам документи с текст и числа. За създаване на индекс използвам

 analyser = new SnowballAnalyzer(Version.LUCENE_30, "English"); 

Използвам Snoschballanalyzer, защото имам нужда от морфология (таблица - таблици). Когато търся текст в индекса - намирам текст, но не намирам числова стойност. Намирам едно решение - Lucene - търсене на поле с числова стойност, но е необходимо да се създаде отделно поле за числови стойности. Сега не е необходимо да търся диапазон от числови стойности. Искам да намеря числова стойност като низ. Пример - изходен текст: "Той е роден през 1990 г.". Трябва да намеря този testxt при поискване "роден" и "1990".


person FetFrumos    schedule 07.05.2013    source източник


Отговори (1)


Не трябва да правите нищо специално.

Ето някакъв код, който прави това, което изглежда искате да постигнете.

RAMDirectory dir = new RAMDirectory();
IndexWriter iw = new IndexWriter(dir, new SnowballAnalyzer(Lucene.Net.Util.Version.LUCENE_30,"English"), IndexWriter.MaxFieldLength.UNLIMITED);

Document d = new Document();
Field f = new Field("text", "", Field.Store.YES, Field.Index.ANALYZED);
d.Add(f);

f.SetValue("He was born 1990 years");
iw.AddDocument(d);

iw.Commit();
IndexReader reader = iw.GetReader();

IndexSearcher searcher = new IndexSearcher(reader);

QueryParser qp = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "text", new SnowballAnalyzer(Lucene.Net.Util.Version.LUCENE_30, "English"));
Query q = qp.Parse("+born +1990");

TopDocs td = searcher.Search(q, null, 25);
foreach (var sd in td.ScoreDocs)
{
    Console.WriteLine(searcher.Doc(sd.Doc).GetField("text").StringValue);
}

searcher.Dispose();
reader.Dispose();
iw.Dispose();
person Jf Beaulac    schedule 07.05.2013
comment
Благодаря ти. Тази треска работи. Моята програма работи с два езика. Когато потърсих броя на езиците не е определен правилно. Това е мой проблем. Ще разбера повече. - person FetFrumos; 08.05.2013