【问题标题】:How to search two different things in two different fields?如何在两个不同的领域搜索两个不同的东西?
【发布时间】:2012-03-09 15:20:09
【问题描述】:

我正在使用 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 中做到这一点。

我已经看过多面搜索,但我无法理解它。如果有人能详细解释一下,我将不胜感激。

【问题讨论】:

  • “不影响返回结果总数”是什么意思?如果您排除文件,它们将不会被退回......我错过了什么?

标签: solr lucene nutch solarium


【解决方案1】:

我无法为您提供 Solarium 的帮助,但您的 Solr 查询应该相对简单:

q=+keyword -ur:exclude&rows=20

【讨论】:

    【解决方案2】:

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

    • 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();
    

    【讨论】:

      猜你喜欢
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      相关资源
      最近更新 更多