Como pesquisar duas coisas diferentes em dois campos diferentes?
Pergunta
Estou usando o NUTCH 1.4 e o SOLR 3.3.0 para rastrear e indexar meu site.No front-end utilizo a API php SOLARIUM para consultar o SOLR.Eu tenho os seguintes campos que pesquiso por padrão:
content -> of type Text
title -> of type Text
ur-> of type url
Quero pesquisar uma palavra-chave, mas ao mesmo tempo quero excluir alguns dos resultados com base em algum padrão de URL sem afetar o número total de resultados retornados.(Por exemplo, sempre quero mostrar 20 resultados.)
Se alguém souber uma maneira de fazer isso com SOLARIUM seria muito bom.Mas se não, estou curioso para saber como isso pode ser feito no SOLR.
Já olhei para a pesquisa facetada, mas não consegui entender.Se alguém puder explicar em detalhes eu realmente apreciaria.
Solução
Não posso ajudá-lo com o Solarium, mas sua consulta no Solr deve ser relativamente simples:
q=+keyword -ur:exclude&rows=20
Outras dicas
http://{url_endpoint}/?wt=json&rows=20&start=0&q=content:Conteúdo do Texto OU título:títuloTexto OU você:url
- O resultado wt=json estará no formato json
- rows=20 o resultado será paginado por 20 registros por página
- start=0 página para começar a exibir resultados
- q = consulta para executar a pesquisa (certifique-se de escapar corretamente das entradas também * curinga para procurar qualquer coisa antes e depois)
Em php usando 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();