Solr CopyField

http://blog.csdn.net/lisong526/article/details/7461840

solr的index schema中,除了支持基本數值類型的field,還支持一些特別的field,比如較常用的CopyField。以下面的schema配置片斷爲例:

<schema name="eshequn.post.db_post.0" version="1.1"
    xmlns:xi="http://www.w3.org/2001/XInclude">
     <fields>
     	<!-- for title -->
        <field name="t" type="text" indexed="true" stored="false" />
        <!-- for abstract -->
        <field name="a" type="text" indexed="true" stored="false" />
        <!-- for title and abstract -->
        <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>
    </fields>
    <copyField source="t" dest="ta" />
    <copyField source="a" dest="ta" />
</schema>

字段t是文章的標題,字段a是文章的摘要,字段ta是文章標題和摘要的聯合。添加索引文檔時,只需要傳入t和a字段的內容,solr會自動索引ta字段。這算不上多高級的功能,不過如果讓你來實現這個功能,你會怎麼做呢?我接手的搜索系統原來就有類似的功能,它的做法是,將t和a字段的文本合併,塞到ta字段,無可厚非的做法。不過,有人注意到lucene的Document類提供的public final Field[] getFields(String name)類似函數不?也就是說,lucene中的一個name可以對應多個Field。solr在添加索引時,會檢查field name是不是copyField集合中的source,是的話就以其value構造dest field。如果dest由多個source構成,就需要將其指定爲multiValued。

對於查詢來說,如果查詢字段要來自多個字段,一種選擇是使用CopyField,化多個字段爲一個字段,缺點是不能區分各個字段的重要度差別。比如文章的標題和摘要,標題就要比摘要重要性更強,如果有這方面的要求,可以選擇查詢多個字段的做法。
發佈了16 篇原創文章 · 獲贊 5 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章