Apache Solr Search API默认结果过滤器

时间:2016-08-11 09:53:23

标签: apache search indexing solr nutch

我正在使用Solr with apache nutch来索引网站

我的json结果如下:

  "response": {
"numFound": 0,
"start": 0,
"docs": [
  {
    "id": "http://mysite.pl/cl-BR/link/link",
    "url": "http://mysite.pl/cl-BR/link/link",
    "content": [
      "content"
    ],
    "_version_": 0000
  },
  {
    "id": "http://mysite.pl/ru-RU/link/link",
    "url": "http://mysite.pl/ru-RU/link/link",
    "content": [
      "content"
    ],
    "_version_": 0000
  },
  {
    "id": "http://mysite.pl/en-EN/link/link",
    "url": "http://mysite.pl/en-EN/link/link",
    "content": [
      "content"
    ],
    "_version_": 0000
  },

我想在查询中添加参数,包含有关语言的信息,例如:en-EN 接下来只返回搜索结果,其中url包含我的参数。

例如: 我的问题是:/solr/CoreName/select?q=you&fl=id,ul,content&urlContains=en-EN

我的结果是:

  "response": {
"numFound": 0,
"start": 0,
"docs": [
  {
    "id": "http://mysite.pl/en-EN/link/link",
    "url": "http://mysite.pl/en-EN/link/link",
    "content": [
      "content"
    ],
    "_version_": 0000
  },

当我的查询是:/solr/CoreName/select?q=you&fl=id,ul,content&urlContains=ru-RU

我的结果是:

  "response": {
"numFound": 0,
"start": 0,
"docs": [
  {
    "id": "http://mysite.pl/ru-RU/link/link",
    "url": "http://mysite.pl/ru-RU/link/link",
    "content": [
      "content"
    ],
    "_version_": 0000
  },

我该怎么做?

1 个答案:

答案 0 :(得分:1)

最干净的实施将是您架构中的add a custom field,然后use copyField to copy内容从urlurl_tokenized字段。< / p>

<copyField source="url" dest="url_tokenized" />

通过using a PatternTokenizer,您可以告诉Solr按/拆分令牌,以便在ru-RU字段中将url_tokenized作为令牌:

<analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern="/"/>
</analyzer>

哪个应该给你这样的东西:

<fieldType name="url_tokenized" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern="/"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

通过添加LowerCaseFilterFactory,我们确保无论使用何种套管,都可以找到ru-RU和ru-ru。

然后通过对查询字符串应用过滤查询(fq)来完成查询:

...&fq=url_tokenized:ru-ru

这将限制对包含&#34; / ru-ru /&#34;的文档的响应。在其网址的某处。