2012-10-03 3 views
2

Я очень новичок в apache solr, я могу загрузить pdf-файлы в solr, и я могу искать эти файлы.Что такое индекс в apache solr?

но что такое индексирование в solr. когда я загружаю pdf-файл, как он будет делать индексацию.

это код, я использовал, чтобы загрузить файл в формате PDF

ContentStreamUpdateRequest up 
      = new ContentStreamUpdateRequest("/update/extract"); 

      up.addFile(fileName); 

      up.setParam("literal.id", solrId); 
      up.setParam("literal.first_name", "apachesolr"); 
      up.setParam("literal.last_name", "cookbook"); 
      up.setParam("literal.age", "30"); 

      up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); 

      solrServer.request(up); 

ниже мой schema.xml

<field name="first_name" type="string" indexed="true" stored="true" required="true"/> 

<field name="last_name" type="string" indexed="true" stored="true" required="true"/> 
<field name="age" type="int" indexed="true" stored="true" required="true"/> 

<field name="created_at" type="date" indexed="true" stored="true"/> 
<field name="updated_at" type="date" indexed="true" stored="true"/> 
<field name="id" type="string" indexed="true" stored="true" required="true"/> 

, когда я ищу с любым содержанием в формате PDF. результат выглядит следующим образом

SolrDocument[{ 
last_modified=Fri Oct 17 08:17:38 IST 2003, 
author=Mark Roth, Eduardo Pelegri-Llopart, 
title=[JSP 2.0 Specification, Final Release], 
content_type=[application/pdf], 
keywords=JSP, 
age=30, 
last_name=cookbook, 
first_name=apachesolr, 
id=jsp-2_0-fr-spec.pdf 
}] 

Как это будет в состоянии получить название, автор, ключевые слова ... и т.д ..

пожалуйста, помогите мне. заранее спасибо.

ответ

4

Вы неправильно понимаете концепцию документа в поисковых системах. Документ представляет собой набор именованных полей с соответствующими значениями. Вы всегда должны явно указывать каждое поле. Для начала, попробуйте следующий код Solrj:

CommonsHttpSolrServer solr = new CommonsHttpSolrServer("http://localhost:8983/solr"); 
for(int i = 0; i < 1000; ++i) { 
    SolrInputDocument doc = new SolrInputDocument(); 
    doc.addField("title", "My Favorite book"); 
    doc.addField("author", "Kevin"); 
    doc.addField("content", "Bla bla bla"); 
    solr.add(doc); 
} 
solr.commit(); 

Этот код создает новый SolrInputDocument и добавляет 3 поля - «название», «автор» и «содержание» (примечание: все эти поля должны быть определены в схеме .xml, просто чтобы Solr знал, как индексировать и хранить эти поля), затем добавляет новый документ к транзакции (solr.add(doc)) и, наконец, совершает изменения. Это основной способ работы с Solr.

В этом нормальном потоке вы должны извлечь текст из документов самостоятельно. Например, для этой цели вы можете использовать Tika. Это самый гибкий и мелкозернистый способ.

То, что вы пытаетесь сделать, это использовать новый Solr особенность - извлечение контента. Если я правильно понимаю, вы пытаетесь установить поле с setParams(), что неверно. setParams() только устанавливает параметры запроса, которые затем переводятся в параметры URL, чтобы Solr знал , как обрабатывать сам запрос. Насколько я знаю, таким образом вы не можете сами устанавливать поля. Вместо этого /update/extract обработчика будет пытаться содержания экстракта по MIME файлу типа, найти подсказки о документе атрибуты и использовать их в качестве полого (обратите внимание, что Solr использует библиотеку Тика для извлечения содержимого документа). Итак, если вы действительно хотите использовать обработчик /update/extract, попробуйте следовать this exampleбез изменения строк, соответствующих запросу параметров, и отметьте какие поля сгенерированы.

Смежные вопросы