Я использую API solrj для запроса моего индекса SOLR 3.6. У меня есть несколько текстовых полей, которые я бы хотел похудеть. Из того, что я прочитал, я должен был бы сделать это, используя типы запросов smax или edismax. Я пробовал следующее:Усиление полей в SOLR с помощью Solrj
SolrQuery query = new SolrQuery();
query.setQuery("title:apples oranges content:apples oranges");
query.setQueryType("edismax");
query.set("qf", "title^10.0 content^1.0");
QueryResponse rsp = m_Server.query(query);
Но это не работает. Я попробовал следующие варианты для установки типа запроса, но, похоже, это не имеет значения.
query.setQueryType("dismax");
query.set("qt","dismax");
query.set("type","edismax");
query.set("qt","edismax");
query.set("type","dismax");
Я хотел бы сохранить полный синтаксис запроса Lucene, поэтому я предпочитаю ExtendedDisMax для DisMax. Ускорение отдельных терминов в запросе (как показано ниже) действительно работает, но не является допустимым решением, поскольку запросы автоматически генерируются и могут быть произвольно сложными - это синтаксис.
query.setQuery("title:apples^10.0 oranges^10.0 content:apples oranges");
Любая помощь будет очень признательна.
Вы также можете использовать 'query.setQueryType (" search ")' вместо 'query.set (" qt "," search ")'. – javanna
Спасибо Jayendra. Я попытался создать новый обработчик запросов, как вы предлагаете, но код всегда, кажется, использует существующий обработчик запросов (по умолчанию «/ select», который был в примере файла конфигурации). Я смог заставить это работать, изменив существующий обработчик запросов. Но это означает, что я не могу выбирать между типами запросов. – Joe
А, наконец, получил эту работу. Вышеприведенное решение более или менее корректно. После погружения в источник я понял, что мне нужно установить имя requestHandler для «/ search» и query.set («qt», «/ search»). QueryRequest явно ищет «/», иначе он по умолчанию использует «/ select». – Joe