我正在使用Solr 4.5.1,我在solr中将这两个字段编入索引:
schema.xml中
<field name="event_id" type="custom_string" indexed="true" stored="true" />
<field name="text" type="text_fr" indexed="true" multiValued="true" stored="true"/>
<copyField source="event_id" dest="text"/>
<fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<!-- normalisation des accents, cédilles, e dans l'o,...-->
<filter class="solr.ASCIIFoldingFilterFactory"/>
<!-- suppression des doublons éventuels -->
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
solrconfig.xml中
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
<!--Custom default for Iris -->
<str name="fl">id</str>
<str name="hl">on</str>
<str name="hl.simple.pre">[###</str>
<str name="hl.simple.post">###]</str>
<str name="hl.fl">event_id</str>
</lst>
</requestHandler>
正如您在solrconfig.xml中注意到的那样,我在/ select requesthandler上突出显示字段event_id,PS字段event_id始终包含一个href。
当我在event_id字段“htp://XXX.ZZZ.WWW/OFF”上存储此url时,我尝试使用此查询进行查询:
event_id:(htp\:\/\/XXX.ZZZ.WWW\/OFF)
我得到的结果是正确的:
{
"responseHeader": {
"status": 0,
"QTime": 11,
"params": {
"indent": "true",
"q": "event_id:(htp\\:\\/\\/XXX.ZZZ.WWW\\/OFF)",
"_": "1432653054406",
"wt": "json"
}
},
"response": {
"numFound": 2,
"start": 0,
"docs": [
{
"id": "ccb7f2bf-c758-4ebe-bcbe-48f73f43274d"
},
{
"id": "4f9386c9-a1fb-4918-b163-86ff20cb792f"
}
]
},
"highlighting": {
"ccb7f2bf-c758-4ebe-bcbe-48f73f43274d": {
"event_id": [
"[###htp://XXX.ZZZ.WWW/OFF###]"
]
},
"4f9386c9-a1fb-4918-b163-86ff20cb792f": {
"event_id": [
"[###htp://XXX.ZZZ.WWW/OFF###]"
]
}
}
}
但是当我尝试这个查询时:
text:(htp\:\/\/XXX.ZZZ.WWW\/OFF)
我得到了这个结果:
{
"responseHeader": {
"status": 0,
"QTime": 9,
"params": {
"indent": "true",
"q": "text:(htp\\:\\/\\/XXX.ZZZ.WWW\\/OFF)",
"_": "1432653585146",
"wt": "json"
}
},
"response": {
"numFound": 2,
"start": 0,
"docs": [
{
"id": "ccb7f2bf-c758-4ebe-bcbe-48f73f43274d"
},
{
"id": "4f9386c9-a1fb-4918-b163-86ff20cb792f"
}
]
},
"highlighting": {
"ccb7f2bf-c758-4ebe-bcbe-48f73f43274d": {},
"4f9386c9-a1fb-4918-b163-86ff20cb792f": {}
}
}
并且如输出中所示,event_id没有突出显示,就我而言,我认为当event_id在Solr上编入索引时,它被索引为字符串,而当它被复制到文本时它会被激活由于存在标记化器,令牌“htp”,“XXX.ZZZ.WWW”和“OFF”,我认为这可能是我的问题的根源,因为当我索引一个简单的字符串时它起作用(例如event_id =“关闭“)而不是网址(”http:// ...“),你能帮我理解为什么吗?
答案 0 :(得分:1)
复制时的基本要求是,类型应该是兼容的。您的event_id是custom_string类型,我将其假设为普通字符串。但是文本的类型为text_fr,它具有tokenizer和filters。您可以尝试将这两个字段都设置为custom_string,除非另有说明,否则您具有使用标记生成器的特定要求