我有一个我想要搜索的网址数据库。因为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
我应该使用不同的查询过滤器或标记器吗?
答案 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:这不是 实际做任何标记化或 什么都可以!它 将原始文本作为一个术语返回。 有些情况下你有 总是得到一个字的字段,但是 你需要做一些基本的分析 像小写一样。但是,它更多 可能是由于排序或 您需要的分面要求 索引字段不超过 一个学期。当然是一份文件 标识符字段,如果提供和不 一个数字,会用这个。