在Solr中索引和查询URLS

时间:2011-01-13 18:59:27

标签: url indexing solr tokenize querying

我有一个我想要搜索的网址数据库。因为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

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

3 个答案:

答案 0 :(得分:0)

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

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

但是对于你的要求你需要将它变为多值并将其编入索引1.没有变化2.没有http 3.没有www

或者通过前面的通配符搜索URL(我猜的速度比较慢)

答案 1 :(得分:0)

如果我从你的问题中理解这句话

  

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 :(得分:-1)

您可以尝试keyword tokenizer

来自Packt发布的 Solr 1.4企业级搜索服务器一书

  

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