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

Solr splits a field containing a URL when copying from destination to a copyfield

我使用的是 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 请求处理程序上突出显示了字段 event_id,PS 字段 event_id 始终包含href.

例如,当我将 url 存储在 event_id 字段 "htp://XXX.ZZZ.WWW/OFF" 上时,我尝试使用此查询来查询它:

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="OFF")而不是 url("http://...")时有效,你能帮我理解为什么吗?

复制的基本要求是类型要兼容。您的 event_id 是 custom_string 类型,我假设它是普通字符串。但是,文本的类型为 text_fr,它具有分词器和 filters。您可以尝试将两个字段设为 custom_string,除非您有特定要求使用分词器