Как я могу индексировать файлы .html в SOLR

Файлы, которые я хочу индексировать, хранятся на сервере (мне не нужно сканировать). /путь/к/файлам/ пример HTML-файла

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="product_id" content="11"/>
<meta name="assetid" content="10001"/>
<meta name="title" content="title of the article"/>
<meta name="type" content="0xyzb"/>
<meta name="category" content="article category"/>
<meta name="first" content="details of the article"/>

<h4>title of the article</h4>
<p class="link"><a href="#link">How cite the Article</a></p>
<p class="list">
  <span class="listterm">Length: </span>13 to 15 feet<br>
  <span class="listterm">Height to Top of Head: </span>up to 18 feet<br>
  <span class="listterm">Weight: </span>1,200 to 4,300 pounds<br>
  <span class="listterm">Diet: </span>leaves and branches of trees<br>
  <span class="listterm">Number of Young: </span>1<br>
  <span class="listterm">Home: </span>Sahara<br>

</p>
</p>

Я добавил обработчик запроса в файл solrconfing.xml.

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

My data-config.xml is look like this

<dataConfig>
<dataSource type="FileDataSource" />
<document>
    <entity name="f" processor="FileListEntityProcessor" baseDir="/path/to html/files/" fileName=".*html" recursive="true" rootEntity="false" dataSource="null">
        <field column="plainText" name="text"/>
    </entity>
</document>
</dataConfig>

Я сохранил файл schema.xml по умолчанию и добавил следующий фрагмент кода в файл schema.xml.

 <field name="product_id" type="string" indexed="true" stored="true"/>
 <field name="assetid" type="string" indexed="true" stored="true" required="true" />
 <field name="title" type="string" indexed="true" stored="true"/>
 <field name="type" type="string" indexed="true" stored="true"/>
 <field name="category" type="string" indexed="true" stored="true"/>
 <field name="first" type="text_general" indexed="true" stored="true"/>

 <uniqueKey>assetid</uniqueKey>

когда я попытался выполнить полный импорт после его настройки, он показывает, что все файлы html загружены. Но когда я искал в SOLR, это не дало мне никакого результата. Кто-нибудь знает, что может быть возможной причиной?

Насколько я понимаю, все файлы загружены правильно, но не проиндексированы в SOLR. Кто-нибудь знает, как я могу проиндексировать эти метатеги и содержимое HTML-файла в SOLR?

Ваш ответ будет оценен.


person Anand Khatri    schedule 05.02.2013    source источник


Ответы (4)


Вы можете использовать обработчик запросов на извлечение Solr, чтобы передать Solr файл HTML и извлечь содержимое из файла html. . например по ссылке

Solr использует Apache Tika для извлечения содержимого из загружен HTML-файл

Nutch с Solr — это более широкое решение, если вы хотите сканировать веб-сайты и индексировать их.
Nutch с Solr Tutorial поможет вам начать.

person Jayendra    schedule 06.02.2013
comment
Меня больше интересует конфигурация TIKA. Но в документации они использовали команду CURL. Я не хочу идти с CURL, я хочу что-то автоматизированное. У вас есть рабочий пример с TIKA и SOLR? Было бы понятнее и полезнее. - person Anand Khatri; 06.02.2013
comment
завиток только для примера. Вы можете использовать такой клиент, как Solrj, чтобы проверить свою папку и отправить изменения в Solr. Вы можете запланировать работу, чтобы сделать то же самое. Tika действует как оболочка для идентификации файла и его анализа с использованием библиотек. Вам не нужно вносить никаких изменений. - person Jayendra; 08.02.2013
comment
У меня есть еще один вопрос для конфигурации Tika1.2 и solr4. Вопрос не могли бы вы взглянуть туда и сказать мне, что я делаю не так? - person Anand Khatri; 12.02.2013

Вы хотели иметь fileName="*.html" в вашем файле data-config.xml? Теперь у вас есть fileName=".*html"

Я почти уверен, что Solr не будет знать, как перевести ваши мета-поля из вашего html в поля индекса. Я не пробовал.

Однако я создал программы для чтения (x)html (используя xpath). Это создаст отформатированный xml-файл для отправки в \update. На этом этапе вы должны иметь возможность использовать dataimporthandler для поиска этих отформатированных xml-файлов.

person Chris Warner    schedule 05.02.2013
comment
ваш комментарий мне не очень понятен. не могли бы вы рассказать, как вы создали программу и как вы создали XML и как вы связываете это с SOLR? - person Anand Khatri; 05.02.2013
comment
Конечно. Это может быть программа на C# или Java для чтения ваших HTML-файлов и создания из их мета-полей отформатированного ‹update›‹doc›‹field1/›‹field2›‹/doc›‹/update› xml-файла или файлов. Затем укажите обработчику импорта данных эти правильно отформатированные xml-файлы, чтобы обновить индекс. Это помогает? - person Chris Warner; 05.02.2013
comment
о, это означает, что я должен написать внешнюю программу, и сначала я должен передать все файлы этой программе, и она будет генерировать связанные файлы xml, а затем SOLR сможет выполнять индексирование. Я хочу что-то автоматизированное и быстрое, потому что у меня есть файлы размером в несколько ТБ (терабайт). так что хорошо иметь автоматизированный процесс. - person Anand Khatri; 06.02.2013
comment
Вы упомянули, что не хотите сканировать html-файлы, что было бы очень легко с nutch.apache.org, я думаю Я бы использовал nutch для обхода html-файлов или написал программу для чтения html-файлов и обновления индекса. Я бы вообще не использовал dataimporthandler - person Chris Warner; 06.02.2013
comment
Вы знаете, как настроить nutch apache с помощью SOLR? Я пробовал Nutch один раз, но не добился успеха. а документация nutch не очень понятна. Если вы знаете, то не могли бы вы помочь мне настроить и настроить? - person Anand Khatri; 06.02.2013

Вот полный пример преобразования HTML в текст и извлечения соответствующих метаданных:

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.BodyContentHandler;
import org.junit.Test;

import java.io.ByteArrayInputStream;

public class ConversionTest {

    @Test
    public void testHtmlToTextConversion() throws Exception {
        ByteArrayInputStream bais = new ByteArrayInputStream(("<html>\n" +
            "<head>\n" +
            "<title> \n" +
            " A Simple HTML Document\n" +
            "</title>\n" +
            "</head>\n" +
            "<body></div>\n" +
            "<p>This is a very simple HTML document</p>\n" +
            "<p>It only has two paragraphs</p>\n" +
            "</body>\n" +
            "</html>").getBytes());
        BodyContentHandler contenthandler = new BodyContentHandler();
        Metadata metadata = new Metadata();
        AutoDetectParser parser = new AutoDetectParser();
        parser.parse(bais, contenthandler, metadata, new ParseContext());
        assertEquals("\nThis is a very simple HTML document\n" + 
            "\n" + 
            "It only has two paragraphs\n" + 
            "\n", contenthandler.toString().replace("\r", ""));
        assertEquals("A Simple HTML Document", metadata.get("title"));
        assertEquals("A Simple HTML Document", metadata.get("dc:title"));
        assertNull(metadata.get("title2"));
        assertEquals("org.apache.tika.parser.DefaultParser", metadata.getValues("X-Parsed-By")[0]);
        assertEquals("org.apache.tika.parser.html.HtmlParser", metadata.getValues("X-Parsed-By")[1]);
        assertEquals("ISO-8859-1", metadata.get("Content-Encoding"));
        assertEquals("text/html; charset=ISO-8859-1", metadata.get("Content-Type"));
    }
}
person user1050755    schedule 15.10.2017

Самый простой способ — использовать инструмент post из каталога bin. Он сделает всю работу автоматически. Вот пример

./post -c conf1 /path/to/files/*

Дополнительная информация здесь

person l0pan    schedule 06.12.2015