【问题标题】:Indexing and Querying URLS in Solr在 Solr 中索引和查询 URL
【发布时间】:2011-06-08 17:12:40
【问题描述】:

我有一个要搜索的 URL 数据库。因为 URL 并不总是写成相同的(可能有也可能没有 www),所以我正在寻找索引和查询 url 的正确方法。 我已经尝试了一些事情,我认为我很接近但不确定为什么它不起作用:

这是我的自定义字段类型:

 <fieldType name="customUrlType" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

例如:

http://www.twitter.com/AndersonCooper被索引时,会在不同的位置有以下词:http,www,twitter,com,andersoncooper

如果我只搜索 twitter.com/andersoncooper,我希望这个查询匹配被索引的记录,这就是为什么我也使用 WDF 来拆分搜索查询, 但是搜索查询最终是这样的:

myfield:("twitter com andersoncooper") 当真的希望它匹配具有以下所有单独单词的所有记录时:twitter com andersoncooper

我应该使用不同的查询过滤器或标记器吗?

【问题讨论】:

  • 你最终解决了这个问题吗?
  • 你知道我们需要在这里做什么吗?

标签: url indexing solr tokenize querying


【解决方案1】:

如果我从你的问题中理解了这个陈述

myfield:("twitter com andersoncooper") 当真的希望它匹配具有以下所有单独单词的所有记录时:twitter com andersoncooper

您正在尝试编写一个匹配两者的查询:

http://www.twitter.com/AndersonCooper

http://www.andersoncooper.com/socialmedia/twitter

(两个链接都包含所有标记),但都不匹配

http://www.facebook.com/AndersonCooper 

http://www.twitter.com/AliceCooper

如果正确,您现有的配置应该可以正常工作。假设您使用的是标准查询解析器并且您通过 curl 或其他一些基于 url 的机制进行查询,您需要查询参数如下所示:

&q=myField:andersoncooper AND myField:twitter AND myField:com

其中一个可能让您感到困惑的问题是默认查询运算符(在查询中的术语之间)是“OR”,这就是为什么必须在上面明确指定 AND 的原因。或者,为了节省一些空间,您可以将默认查询运算符更改为“AND”,如下所示:

&q.op=AND&q=myField:(andersoncooper twitter com)

【讨论】:

    【解决方案2】:

    这应该是最简单的解决方案了:

    <field name="iconUrl" type="string" indexed="true" stored="true" />
    

    但是根据您的要求,您需要将其设置为多值并对其进行索引 1. 没有更改 2. 没有 http 3. 没有 www

    或者通过前面的通配符使 URL 可搜索(我猜这比较慢)

    【讨论】:

    • 是的,string 如果来自StrField,它不会被分析,但可以存储/索引,我猜它适合 url。
    • 这不适用于仅指定部分 url 的 OP 查询
    【解决方案3】:

    你可以试试keyword tokenizer

    来自Packt出版的Solr 1.4 Enterprise Search Server一书

    KeywordTokenizerFactory:这不是 实际上进行任何标记化或 什么都没有!它 将原始文本作为一个术语返回。 在某些情况下,您有 总是得到一个词的字段,但是 你需要做一些基本的分析 像小写一样。然而,更多的是 可能是由于排序或 您将需要的刻面要求 索引字段不超过 一学期。当然是文件 标识符字段,如果提供且未提供 一个数字,会用这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      相关资源
      最近更新 更多