强制Solr在搜索期间不使用_version_字段

时间:2015-03-02 18:07:54

标签: java solr lucene full-text-search

我的 schema.xml 中有_version_字段的默认声明:

<field name="_version_" type="long" indexed="true" stored="true"
   multiValued="false"/>

我已经读过这个字段仅由Solr内部管理进行并发管理,但是当我搜索“002219”作为回报时,我得到:

"docs": [  
  {  
        "person_street_t": [  
          "<streetName>",  
        ],  
        "id": "123",  
        "person_abbr_t": [  
          "<sb>"  
        ],  
        "person_name_t": [  
          "<sb>"  
        ],  
        "person_city_t": [  
          "<city>"  
        ],  
        "person_zipcode_s": "<zipcode>",  
        "type_s": "PERSON",  
        "person_house_number_s": "<hn>",  
        "_version_": 1494523490022195200  
                            //****** <- matched by Solr
   }  
 ]  

但我不希望Solr搜索该字段。 这是正常的行为吗?难道我做错了什么?或者是否有其他方法可以在_version_字段中禁用搜索?

更新:

好的,我读了一下,发现这个字段(_text)是defaultSearchField。所以我现在所做的就是改变默认值:

<copyField source="*" dest="_text"/>

为:

  <copyField source="*_t" dest="_text"/>
  <copyField source="*_s" dest="_text"/>
  <copyField source="*_ts" dest="_text"/>
  <copyField source="*_ss" dest="_text"/>

这些是我正在索引的唯一字段类型(* _ts由我添加)。这还不够吗?

1 个答案:

答案 0 :(得分:1)

如果您使用了示例架构,则很可能已定义 copyField ,将所有内容复制到单个 text 字段(在schema.xml中定义)并搜索(在solrconfig.xml中)。

这有利于开发,但所有内容都只是作为文本进行搜索,可能不是您想要做的事情。

您可以调查切换到eDisMax之类的内容。或者,如果您尚未做好准备,则可以定义更严格的 copyField 规则,以仅汇总所需的字段。