Я хочу прочитать единственный термин в моем индексе с Lucene - PullRequest
1 голос
/ 14 января 2011

Я хочу прочитать каждый индекс.Я хочу прочитать и напечатать, чтобы утешить единственный термин в моем индексе.(Я не хочу просматривать содержимое с Люком).Должен ли я использовать класс IndexReader?

Кто-нибудь может мне помочь?

Я пытался сделать:

    iReader = IndexReader.open(directory);

    int num = iReader.numDocs();
    for ( int i = 0; i < num; i++)
    {
        if ( ! iReader.isDeleted( i))
        {
            org.apache.lucene.document.Document d = iReader.document(i);
            System.out.println( "d=" +d.getField("title").tokenStreamValue());

        }
    }


    org.apache.lucene.document.Document doc = new org.apache.lucene.document.Document();

    //aggiungo tutti i documenti


    Field title = new Field(
              "title",
              testDoc.title,
              Field.Store.YES,
              Field.Index.ANALYZED,
              Field.TermVector.WITH_POSITIONS_OFFSETS);

    doc.add(title);


    Field content = new Field(
              "content",
              testDoc.content,
              Field.Store.YES,
              Field.Index.ANALYZED,
              Field.TermVector.WITH_POSITIONS_OFFSETS);
    doc.add(content);


    iWriter.addDocument(doc);

но d = null; Где я ошибся?Я хочу получить термин для заголовка поля, которое я проиндексировал ...

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 14 января 2011

Опять же, я использую Java, но принцип будет таким же.

То, что вы хотите сделать, похоже на перечисление частот терминов, но вам нужны только отдельные поля.

Этот пример и этот пример о том, как считать частотные единицы в индексе Lucene, должны помочь вам.

0 голосов
/ 14 января 2011

Я использую Lucene.Net, но я предполагаю, что логика идентична.

Должен быть точно один из установленных StringValue (), ReaderValue () и BinaryValue ().Те, кто не используется, либо возвращают ноль, либо выдают исключение.В вашем случае попробуйте вместо этого прочитать StringValue ().

0 голосов
/ 14 января 2011

Чтобы проверить индекс, используйте IndexReader.В классе есть метод document(int), который можно использовать для поиска отдельных документов, содержащихся в индексе.Затем документ предлагает вам все поля, которые были созданы для этого документа.

С помощью поля вы можете получить либо его значение, либо поток токенов (т. Е. Строки, заканчивающиеся в индексе).

[EDIT] Если вы удаляете документы, в индексе будут дыры.Таким образом, вы должны добавить чек:

org.apache.lucene.document.Document d = iReader.document(i);
if( d == null ) continue; // <<-- You need this check

System.out.println( "d=" +d.getField("title").tokenStreamValue());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...