Как искать две разные вещи в двух разных полях? - PullRequest
0 голосов
/ 09 марта 2012

Я использую NUTCH 1.4 и SOLR 3.3.0 для сканирования и индексирования моего сайта.На внешнем интерфейсе я использую php API SOLARIUM для запроса к SOLR.У меня есть следующие поля, по которым я ищу по умолчанию:

content -> of type Text

title -> of type Text

ur-> of type url

Я хочу выполнить поиск по ключевому слову, но в то же время хочу исключить некоторые результаты на основе некоторого шаблона URL, не влияя на общее количество.количество результатов возврата.(Например, я всегда хочу показывать 20 результатов.)

Если кто-нибудь знает способ сделать это с помощью SOLARIUM, было бы очень хорошо.Но если нет, то мне любопытно, как это можно сделать в SOLR.

Я уже посмотрел на многогранный поиск, но не смог обернуть его вокруг.Если кто-то может объяснить в деталях, я был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Я не могу помочь вам с Solarium, но ваш запрос Solr должен быть относительно простым:

q=+keyword -ur:exclude&rows=20
0 голосов
/ 17 декабря 2013

http://{url_endpoint}/?wt=json&rows=20&start=0&q=content:contentText ИЛИ title: titleText ИЛИ ur: url

  • wt = json Результат будет в формате JSON
  • строки = 20 результат будет разбит на страницы по 20 записей на странице
  • start = 0 страница для начала отображения результатов
  • q = запрос для запуска поиска (убедитесь, что правильно введены также входные данные * * подстановочный знак для просмотраза что-либо до и после)

В php используется curl.

$solr_end_point = '';   //enter endpoint
$search_term = '';
$url_type = '';
$start = 0;
$ch = curl_init();
$query = urlencode("content:*{$search_term}* OR title:*{$search_term}* OR ur:*{$url_type}*");
curl_setopt($ch, CURLOPT_URL, "http://{$solr_end_point}/?wt=json&rows=30&start={$start}&q={$query}");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$result = curl_exec($ch);
curl_close($ch);
print_r($result);   //output result (json)
$json_result = json_decode($result,true);
print_r($json_result);  //output result as an array
exit();
...