Solr中的url索引和查询
我有一个我想搜索的URL数据库。因为URL并不总是写得一样(可能有也可能没有www),所以我正在寻找索引和查询URL的正确方法。 我尝试了一些方法,我认为我很接近,但不确定为什么它不起作用: 以下是我的自定义字段类型:Solr中的url索引和查询,url,indexing,solr,tokenize,querying,Url,Indexing,Solr,Tokenize,Querying,我有一个我想搜索的URL数据库。因为URL并不总是写得一样(可能有也可能没有www),所以我正在寻找索引和查询URL的正确方法。 我尝试了一些方法,我认为我很接近,但不确定为什么它不起作用: 以下是我的自定义字段类型: <fieldType name="customUrlType" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer
<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
如果我只搜索twitter.com/andersoncooper,我希望此查询与索引的记录匹配,这就是为什么我还使用WDF分割搜索查询,
但是,搜索查询结果如下所示:
myfield:(“twitter com andersoncooper”)当您真的希望它匹配所有包含以下单独单词的记录时:twitter com andersoncooper
我是否应该使用其他查询筛选器或标记器?您可以尝试
来自Packt出版的Solr 1.4 Enterprise Search Server一书
关键字TokenizerFactory:这不需要
实际执行任何标记化或
为了那件事什么都可以!信息技术
将原始文本作为一个术语返回。
有些情况下,你有一个
字段,它总是得到一个单词,但是
你需要做一些基本的分析
比如小写。然而,它更重要
可能是由于排序或
您将需要的镶嵌面要求
一个索引字段,不超过
一个任期。当然是一份文件
标识符字段(如果提供和未提供)
一个数字,会用这个
这应该是最简单的解决方案:
<field name="iconUrl" type="string" indexed="true" stored="true" />
但对于您的需求,您需要将其设置为多值并将其索引为1。没有变化2。没有http 3。没有www
或者通过前面的通配符搜索URL(我想这会慢一些)如果我从你的问题中理解了这一点
myfield:(“twitter com andersoncooper”)当您真的希望它匹配所有包含以下单独单词的记录时:twitter com andersoncooper
您正在尝试编写一个查询,该查询将同时匹配以下两项:
http://www.twitter.com/AndersonCooper
及
(两个链接都包含所有标记),但都不匹配
http://www.facebook.com/AndersonCooper
或
如果这是正确的,那么您现有的配置应该可以正常工作。假设您使用的是标准查询解析器,并通过curl或其他基于url的机制进行查询,则需要查询参数如下所示:
&q=myField:andersoncooper AND myField:twitter AND myField:com
&q.op=AND&q=myField:(andersoncooper twitter com)
可能让您感到困惑的一个问题是,默认的查询运算符(在查询中的术语之间)是“或”,这就是为什么必须在上面明确指定AND的原因。或者,为了节省一些空间,您可以将默认查询运算符更改为“AND”,如下所示:
&q=myField:andersoncooper AND myField:twitter AND myField:com
&q.op=AND&q=myField:(andersoncooper twitter com)
你曾经整理过这个吗?你知道我们需要在这里做什么吗?是的,string
如果从StrField
,它将不会被分析,但可以被存储/索引,我想它适合url。这不适用于只指定url部分的OP查询