我有一个Solr实例,我在其中索引网页,我希望能够查询网址的部分内容。例如。 en.wikipedia.org/wiki/Main_Page
也应该与en.wikipedia.org
匹配。
为此,我创建了一个名为url_tokens
的字段,该字段将从我的url
字段中复制,并在索引时使用PathHierarchyTokenizerFactory
进行分析。
我认为url_tokens
字段会包含en.wikipedia.org/wiki/Main_Page
,en.wikipedia.org/wiki
和en.wikipedia.org
,但这是我从Solr管理查询界面获得的结果:
...
"url": "http://en.wikipedia.org/wiki/Main_Page",
"url_tokens": [
"http://en.wikipedia.org/wiki/Main_Page"
],
...
我做错了什么?
这些是我的schema.xml的相关部分:
<field name="url_tokens" type="url_tokens_type" indexed="true" stored="true" multiValued="true"/>
<field name="url" type="url" indexed="true" stored="true"/>
<copyField source="url" dest="url_tokens"/>
<fieldType name="url" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"/>
</analyzer>
</fieldType>
<fieldType name="url_tokens_type" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
</analyzer>
</fieldType>
答案 0 :(得分:0)
我找到了答案。我的设置工作正常,只是我预期输出错误。
我预计,因为我使用PathHierarchyTokenizerFactory
对字段进行了标记,并且字段是多值的,所以我会得到
"url_tokens": [
"http://en.wikipedia.org/wiki/Main_Page"
"http://en.wikipedia.org/wiki"
"http://en.wikipedia.org"
],
但我得到的原因
"url_tokens": [
"http://en.wikipedia.org/wiki/Main_Page"
],
搜索结果中的是因为该字段已存储。标记化的发生是因为该字段也被编入索引,但这些标记从未显示在搜索结果中,它们仅用于选择要显示的结果。
我之前没有使用solr管理GUI的anaysis screen,但我已经用它来确认网址是否被正确标记。