2011-01-13 88 views
7

我有一个我想要搜索的URL数据库。由于网址并不总是相同(可能有或没有www),我正在寻找正确的方法来索引和查询网址。 我已经尝试了一些东西,我觉得我很接近,但不知道为什么它不工作:索引和查询Solr中的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,我想这个查询匹配的是索引记录, 这就是为什么我也使用WDF来分割搜索查询 但是搜索查询最终如下所示:

myfield :(“twitter com andersoncooper”)当真的希望它匹配具有以下所有内容的所有记录时字:twitter com andersoncooper

是否有一个不同的查询过滤器或标记器我应该使用?

+1

您是否曾经最终将这个问题整理出来? – Cyrus 2011-09-13 06:59:54

+1

你认为我们需要在这里做什么? – 2014-03-28 16:10:10

回答

-1

你可以尝试keyword tokenizer

从书Solr的1.4企业搜索服务器通过年底Packt出版

KeywordTokenizerFactory:这不 实际上做任何标记化或 任何东西为物!它 将原始文本作为一个术语返回。 有些情况下,您有一个 字段总是会得到一个字,但是 您需要进行一些基本分析 ,比如小写字母。但是,更多的 可能由于排序或面向需求,您将需要 一个索引字段,其索引字段不超过 。当然,一个文档的 标识符字段(如果提供的话,而不是 的一个数字)将使用这个。

+0

这不适用于OP – Gus 2016-10-20 23:36:59

0

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

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

但是对于你的要求,你需要使它多值和索引它1.没有变化2.不含http 3。加www

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

0

如果我没有理解这个说法从你的问题

MyField的:(“叽叽喳喳COM安德森·库珀”)当真的希望它匹配具有以下所有单独的单词的所有记录:Twitter的COM安德森·库珀

你试图写一个查询,将匹配两种:

http://www.twitter.com/AndersonCooper 

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

(这两个链接包含所有令牌),但不能匹配任何

http://www.facebook.com/AndersonCooper 

http://www.twitter.com/AliceCooper 

如果这是正确的,你现有的配置应该工作k很好。假设你使用的是标准的查询分析器和你通过卷曲或其它一些基于URL的机构查询,你需要的查询参数如下所示:

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

其中一个陷阱的可能已被绊倒你了缺省查询操作符(在查询中的术语之间)是“OR”,这就是为什么AND必须在上面明确指定的原因。或者为了节省一些空间,您可以像下面这样将默认查询运算符更改为“AND”:

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