2012-04-09 2 views
1

Состояние dataimporthandler показывает, что оно было проиндексировано и добавлено 10 документов, но не показывало никакого результата при поиске слова, которое является частью добавленного документа. Если я даю : в поиске он показывает все записиSolr не показывает результат после записей таблицы индексирования

пример Clob записи:

<?xml version="1.0" encoding="UTF-8" ?> 
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="someurl" xmlns:csp="someurl.xsd" xsi:schemaLocation="somelocation jar: id="002" message-type="create"> 
<content> 
    <dsp:row> 
     <dsp:channel>100</dsp:channel> 
     <dsp:role>115</dsp:role>  
     </dsp:row> 
    <![CDATA[ <ol><li>java</li></ol><li>ASP</li>]]> 
</body></content></message> 

данных config.xml

<document name="doc"> 
      <entity name="MYCONTENT" transformer="ClobTransformer" 
         query="SELECT CID,XML FROM MYCONTENT"> 

       <field column="CID" name="CID"/> 
       <field column="XML" clob="true" name="XML"/>    
      </entity> 
     </document> 

schema.xml

<field name="CID" type="string" indexed="true" stored="true" required="true"/> 
    <field name="XML" type="string" indexed="true" stored="true" required="true"/> 
    <dynamicField name="*" type="ignored" /> 
    <uniqueKey>CID</uniqueKey> 
    <defaultSearchField>XML</defaultSearchField> 

solrconfig.xml

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
     <lst name="defaults"> 
      <str name="config">/data-config.xml</str> 
      <str name="rows">10</str>  
     </lst> 
     </requestHandler> 

Я не знаю, почему он не показывает результат при поиске «Java» «ASP». Любая помощь приветствуется.

заранее спасибо
Srini

ответ

0

У вас есть две вещи, чтобы исправить.

Во-первых, тип поля «строка» обрабатывает весь документ как один токен. Вам нужен тип текстового поля.

Во-вторых, Solr не анализирует XML в вашем CLOB, он индексирует его как необработанный текст, разделяя токены, как определено вашим выбором токенизатора для этого поля. Например, если вы использовали токенизатор пробелов, он будет рассматривать «115» как один токен, а поиск «115» не будет соответствовать.

Для тестирования я попытался использовать HTMLStripCharFilterFactory в этом определении поля перед токенизатором. См .: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.HTMLStripCharFilterFactory

Это должно лишить значительного количества XML. Если вы хотите обработать его определенным образом, вы, вероятно, захотите узнать о XPathEntityProcessor, который может извлекать части XML для индексирования. См.: http://wiki.apache.org/solr/DataImportHandler#XPathEntityProcessor

+0

Немного больше информации: вам нужно будет определить или настроить тип поля для текста. Пример файла schema.xml, который установлен с Solr 3.5, имеет несколько типов текстовых полей: «text_general» и «text_en» - хорошие места для запуска. Вы можете использовать один из них, а затем настроить его. –

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