Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Solr и Highlighting
Список форумов
 ->  Веб-серверы и серверы приложений


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
Zhazhah : 184
Новичок
Откуда: Краснодар

СообщениеЯнв 06, 2012 23:58 
Ответить с цитатой
Здравствуйте, в solr делаю такой запрос http://localhost:8080/solr/select/?hl.requireFieldMatch=true&q=java&defType=dismax&qf=title^0.3&hl=true
получаю результаты поиска и результаты поиска с подсветкой отдельно друг от друга.. как это исправить? ведь очень не удобно делать слияние этих результатов

Код:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">89</int>
<lst name="params">
<str name="hl.requireFieldMatch">true</str>
<str name="q">java пособие</str>
<str name="qf">title^0.3</str>
<str name="hl">true</str>
<str name="defType">dismax</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="author">Сафонов В.О.</str>
<arr name="cat">
<int>0</int>
<int>1</int>
</arr>
<str name="description"/>
<str name="id">10942</str>
<str name="isbn">5-02-024985-8</str>
<str name="publisher"/>
<str name="title">Введение в Java-технологию: Учебное пособие</str>
</doc>
</result>
<lst name="highlighting">
<lst name="10942">
<arr name="title">
<str>
Введение в <em>Java</em>-технологию: Учебное пособие
</str>
</arr>
</lst>
</lst>
</response>
К началу Посмотреть профиль Отправить личное сообщение
solr_expert : 16
Новичок

СообщениеЯнв 11, 2012 15:33 
Ответить с цитатой
Используйте solrj api (http://wiki.apache.org/solr/Solrj):

Код:

    Iterator<SolrDocument> iter = queryResponse.getResults().iterator();

    while (iter.hasNext()) {
      SolrDocument resultDoc = iter.next();

      String content = (String) resultDoc.getFieldValue("content");
      String id = (String) resultDoc.getFieldValue("id"); //id is the uniqueKey field

      if (queryResponse.getHighlighting().get(id) != null) {
        List<String> highlightSnippets = queryResponse.getHighlighting().get(id).get("content");
      }
    }
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Zhazhah : 184
Новичок
Откуда: Краснодар

СообщениеЯнв 15, 2012 11:16 
Ответить с цитатой
Спасибо, начал разбираться потихоньку... в /lib своего проекта поместил

commons-codec-1.5.jar
commons-httpclient-3.1.jar
commons-io-1.4.jar
jcl-over-slf4j-1.6.1.jar
slf4j-api-1.6.1.jar
slf4j-jdk14-1.6.4.jar
apache-solr-solrj-3.5.0.jar

в папке с файлами Solr slf4j-jdk14-1.6.4.jar не нашёл, скачал slf4j и от туда его взял..

Пример кода из книги Apache Solr 3.1 Cookbook и то что solr_expert подсказал
Код:
public static void main(String[] args) throws MalformedURLException, SolrServerException {
        CommonsHttpSolrServer server = new CommonsHttpSolrServer(
                "http://localhost:8080/solr");

        server.setParser(new XMLResponseParser());
        SolrQuery query = new SolrQuery();
        query.setQuery("description:java");
        query.setStart(0);
        query.setRows(15);
        query.addHighlightField("description");
       


        QueryResponse response = server.query(query);
        SolrDocumentList documents = response.getResults();
        Iterator<SolrDocument> itr = documents.iterator();
        System.out.println("DOCUMENTS " + documents.getNumFound() + ", ");
       
        while (itr.hasNext()) {
            SolrDocument doc = itr.next();

            String id = (String) doc.getFieldValue("id");
            System.out.println(id + ":" + doc.getFieldValue("title"));

            if (response.getHighlighting().get(id) != null) {
                List<String> highlightSnippets = response.getHighlighting().get(id).get("description");
                System.out.println(highlightSnippets.get(0) + "\n");
            }

        }
    }
К началу Посмотреть профиль Отправить личное сообщение
Zhazhah : 184
Новичок
Откуда: Краснодар

СообщениеЯнв 16, 2012 19:26 
Ответить с цитатой
Только не разобрался как сделать поиск по нескольким полям? например в Lucene я делал так

Код:
MultiFieldQueryParser qp = new MultiFieldQueryParser(Version.LUCENE_32,
                new String[]{"title", "author", "publisher", "isbn"}, analyzer);

        Query query = qp.parse(q);
К началу Посмотреть профиль Отправить личное сообщение
solr_expert : 16
Новичок

СообщениеЯнв 23, 2012 19:54 
Ответить с цитатой
можно так попробовать:


Код:
SolrQuery query = new SolrQuery("field1:searchstring1   field2:searchstring2");
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
solr_expert : 16
Новичок

СообщениеЯнв 24, 2012 12:52 
Ответить с цитатой
Другой способ (более рекомендуемый для высоконагруженных приложений) -- это использовать filter queries:

Код:

      SolrQuery solrQuery = new SolrQuery().setQuery(query)
             .setRows(10)
                 .setFilterQueries(filterQuery);


filter queries хорошо кэшируются в кэше filterCache.
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Веб-серверы и серверы приложений


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru