Как искать две разные вещи в двух разных полях?

Я использую 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.

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


person breakdown1986    schedule 09.03.2012    source источник
comment
Что вы имеете в виду, не влияя на общее количество возвращаемых результатов? Если вы исключите документы, они не будут возвращены... Что я упускаю?   -  person javanna    schedule 10.03.2012


Ответы (2)


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

q=+keyword -ur:exclude&rows=20
person David Faber    schedule 09.03.2012

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

  • wt=json результат будет в формате json
  • rows=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();
person fcha    schedule 17.12.2013