从目标位置复制到复制域时,Solr会拆分包含URL的字段

时间:2015-05-26 15:27:21

标签: json xml indexing solr

我正在使用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:// ...“),你能帮我理解为什么吗?

1 个答案:

答案 0 :(得分:1)

复制时的基本要求是,类型应该是兼容的。您的event_id是custom_string类型,我将其假设为普通字符串。但是文本的类型为text_fr,它具有tokenizer和filters。您可以尝试将这两个字段都设置为custom_string,除非另有说明,否则您具有使用标记生成器的特定要求