【问题标题】:Apache Solr Search API default result filtersApache Solr Search API 默认结果过滤器
【发布时间】:2016-12-17 23:50:31
【问题描述】:

我正在使用 Solr 和 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
  },

我该怎么做?

【问题讨论】:

    标签: apache search indexing solr nutch


    【解决方案1】:

    最干净的实现是在你的架构中 add a custom field,然后 use copyField to copy 来自 url 的内容到 url_tokenized 字段。

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

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

    <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
    

    这将限制对在其 URL 中某处包含“/ru-ru/”的文档的响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 2017-05-07
      • 2018-07-30
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多