7

我有一个要搜索的 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

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

4

3 回答 3

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)
于 2016-10-21T00:03:02.607 回答
0

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

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

但是对于您的要求,您需要将其设为多值并将其编入索引 1. 没有更改 2. 没有 http 3. 没有 www

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

于 2011-01-16T22:53:35.227 回答
-1

您可以尝试使用关键字标记器

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

KeywordTokenizerFactory:这实际上并没有做任何标记化或任何事情!它将原始文本作为一个术语返回。在某些情况下,您的字段始终只有一个单词,但您需要进行一些基本分析,例如小写。但是,由于排序或分面要求,您更有可能需要一个不超过一个术语的索引字段。当然,如果提供了文档的标识符字段而不是数字,则会使用它。

于 2011-01-14T14:07:45.950 回答