получение определенных значений поля из люцена - PullRequest
1 голос
/ 16 октября 2011

Я только начал изучать, как работает lucene, и пытаюсь реализовать его на сайте, который я уже написал с помощью mysql.

У меня есть поле с именем city в моих документах, и я хочу получить всезначения для города из документов.

я нашел этот вопрос (это именно то, что мне нужно) Получить все значения люцены, которые имеют определенное имя поля , но все, что они показывают, это строкакод, и, как я уже сказал, я не достаточно опытен, чтобы понять, как реализовать это.

Может кто-нибудь, пожалуйста, помогите мне с кодом для реализации IndexReader.Open(directory,true).Terms(new Term("city", String.Empty));

, что происходит до / после этогообъявление?

я пробовал это:

System.IO.DirectoryInfo directoryPath = new System.IO.DirectoryInfo(Server.MapPath("LuceneIndex"));
    Directory directory = FSDirectory.Open(directoryPath);
    Lucene.Net.Index.TermEnum iReader = IndexReader.Open(directory,true).Terms(new Term("city", String.Empty));

но как мне перебрать результаты?

Ответы [ 2 ]

0 голосов
/ 16 октября 2011

Этот цикл должен повторяться по всем терминам:

Term curTerm = iReader.Term();
bool hasNext = true;
while (curTerm != null && hasNext)
{
    //do whatever you need with the current term....
    hasNext = iReader.Next();
    curTerm = iReader.Term();
}
0 голосов
/ 16 октября 2011

Я не знаком с C # API, но он очень похож на Java.

Этот код выполняет для получения экземпляра IndexReader с доступом только для чтения, который используется длячитать данные из сегментов индекса Lucene, хранящихся в directory.Затем он получает перечисление всех терминов, начиная с заданного.Словарь (часть индекса, в которой хранятся термины) в Lucene состоит из .tis файлов, упорядоченных лексикографически сначала по имени поля, а затем по тексту термина.

Таким образом, это утверждение дает вам перечисление всех текстов терминов, начиная сначало поля city (кроме того: в Java лучше написать new Term("city")).Теперь вам нужно выяснить C # API этого перечисления, а затем пройтись по нему, пока не получите Term, который имеет что-то отличное от field().

Последнее замечание: как правило, вам следует избегать подобных вещей: это может, например, ограничить вашу способность распространять индекс.Если окажется, что это то, что вы делаете в самом начале использования Lucene, то, вероятно, вы используете его больше как базу данных документов, чем как библиотеку поиска.

...