Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr中的url索引和查询_Url_Indexing_Solr_Tokenize_Querying - Fatal编程技术网

Solr中的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

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

如果我只搜索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查询