<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-46  評論-54  文章-0  trackbacks-0

     

      Apache Solr集成至Tomcat

        原有系統已經開發,框架以SSH為基礎,頁面編碼GBK,數據庫為oracle,容器為tomcat6,需要整合全文檢索,下面只是一個簡單的整合測試。

    1、嵌入Tomcat

    解壓 apache-solr-1.3.0.tgz,拷貝apache-solr-1.3.0\example\example-DIH\solr目錄到Tomcat的安裝目錄后,修改solr目錄中的solr.xml,屏蔽rss部分的配置,內容如下:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <solr sharedLib="lib" persistent="true">
     <cores adminPath="/admin/cores">
      <core default="true" instanceDir="db" name="db"></core>
    <!--
      <core default="false" instanceDir="rss" name="rss"></core>
     -->
     </cores>
    </solr>

    • 刪除Tomcat\solr\rss目錄
    • Tomcat\solr\db\lib目錄下添加必要jarojdbc14.jarslf4j-jdk14-1.5.5.jarslf4j-api-1.5.5.jarsolr-dataimporthandler-1.4-SNAPSHOT.jar
    • 拷貝apache-solr-1.3.0\example\webapps\solr.warTomcat\webapps目錄下。
    • 創建Tomcat\conf\Catalina\localhost\solr.xml,內容如下:

    <Context docBase="${catalina.home}/webapps/solr.war" debug="0" crossContext="true" >
       <Environment name="solr/home" type="java.lang.String" value="${catalina.home}/solr" override="true" />
    </Context>

    • 修改Tomcat\conf\server.xml,添加一個端口為8983Connector,內容如下:

    <Connector port="8983" protocol="HTTP/1.1" 

                   connectionTimeout="20000" 

                   redirectPort="8443" URIEncoding="UTF-8"/>





    2、配置DataImportHandler

    change @ 20097110:19:57

        主要修改Tomcat\solr\db\conf\db-data-config.xmlTomcat\solr\db\conf\schema.xmlTomcat\solr\db\conf\solrconfig.xml,三個配置文件:

    • db-data-config.xml

    <dataConfig>

        <dataSource driver="oracle.jdbc.driver.OracleDriver"

        url="jdbc:oracle:thin:@localhost:1521:orcl"

        user="solr" password="solr" batchSize="50"/>

        <document name="contents" >

            <entity name="content" pk="ID"

            query="select * from CONTENT"

            deltaQuery="select ID from CONTENT where to_char(PUBTIME,'yyyy-mm-dd hh24:mi:ss') > '${dataimporter.last_index_time}'"

            transformer="ClobTransformer">

                <field name="title" column="TITLE" />

                <field column="CONTENT" clob="true"/>

                <field name="pubtime" column="PUBTIME" />

            </entity>

        </document>

    </dataConfig>

    • schema.xml

        types標簽最后,追加fieldtype,名稱為text_cjk,中日韓分詞分析器;

        ......



        <fieldtype name="text_cjk" class="solr.TextField"> 

          <analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer"/> 

        </fieldtype>



     </types>



        屏蔽或清除<fields></fields>中的全部代碼,并添加如下內容:

     <fields>

       <field name="id" type="slong" indexed="true" stored="true" required="true" /> 

       <field name="title" type="text_cjk" indexed="true" stored="false"/>

       <field name="content" type="text_cjk" indexed="true" stored="true"/>

       <field name="pubtime" type="date" indexed="true" stored="true"/>

       <field name="searchtext" type="text_cjk" indexed="true" stored="false" multiValued="true"/>

     </fields>



        修改默認唯一索引為先前定義的id

     <uniqueKey>id</uniqueKey>



        修改默認搜索字段為先前定義的searchtext,并將要搜索的titlecontent都拷貝到searchtext中,方便統一檢索:

    ......



     <defaultSearchField>searchtext</defaultSearchField>

    ......



       <copyField source="title" dest="searchtext"/>

       <copyField source="content" dest="searchtext"/>

    ......

     

    add @ 20097110:19:57

    • solrconfig.xml

        修改<dataDir></dataDir>標簽中的檢索數據存放路徑。內容如下:

    <dataDir>${catalina.home}/solr/db/data</dataDir>

     

     



    3、導入和查詢:

    • 完全導入:
      http://localhost:8983/solr/db/dataimport?command=full-import
    • 增量導入:
      http://localhost:8983/solr/db/dataimport?command=delta-import
    • 查詢
      http://localhost:8983/solr
      點擊db,進入一個搜索頁面,填入如下內容:

    pubtime:[2007-11-16T00:00:00Z TO 2008-11-28T00:00:00Z]

    AND

    工作;

    pubtime desc

        點擊搜索,測試。

    4xml解析:

    一個簡單solr查詢結果的輔助搜索類,內容如下:



    import java.net.URL;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;



    import org.dom4j.Document;

    import org.dom4j.Node;

    import org.dom4j.io.SAXReader;

    import org.apache.commons.lang.time.DateUtils;



    public class SolrUtils {

    private List<Node> docs = new ArrayList<Node>();

    private Number numFound = 0;

    private Document doc;

    public List<Node> getDocs() {

    return docs;

    }



    public Number getNumFound() {

    return numFound;

    }

    @SuppressWarnings("unchecked")

    public SolrUtils(String urlString) {

    doc = documentFromURL(urlString);

    if (doc != null ) {

    docs = (List<Node>)doc.selectNodes("/response/result/doc");

    numFound = doc.numberValueOf("/response/result/@numFound");

    }

    }

    public Document documentFromURL(String urlString){

    try {

    SAXReader reader = new SAXReader();

    URL url = new URL(urlString);

           doc = reader.read(url);

           return doc;

    } catch (Exception e) {

    e.printStackTrace();

    }

    return null;

    }



    public static String valueOf(Object obj, String name){

    return valueOf(obj, "str", name);

    }

    public static Date dateValueOf(Object obj, String name){

    String[] parsePatterns = new String[]{

    "yyyy-MM-dd'T'HH:mm:ss'Z'",

    "yyyy-MM-dd'T'HH:mm:ss.S'Z'",

    "yyyy-MM-dd'T'HH:mm:ss.SS'Z'",

    "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",

    };

    try {

    return DateUtils.parseDate(valueOf(obj, "date", name), parsePatterns);

    } catch (Exception e) {

    e.printStackTrace();

    }

    return null;

    }

    public static String valueOf(Object obj, String type, String name){

    String path = "./" + type + "[@name='" + name + "']";

    if (obj instanceof Node) {

    Node n = (Node)obj;

    return n.valueOf(path);

    }

    return "";

    }

    public static Number numberValueOf(Object obj, String type, String name){

    String path = "./" + type + "[@name='" + name + "']";

    if (obj instanceof Node) {

    Node n = (Node)obj;

    return n.numberValueOf(path);

    }

    return null;

    }

    public static void main(String[] args) throws Exception {

    String url = "http://localhost:8983/solr/db/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on";

    SolrUtils su = new SolrUtils(url);

    System.out.println(su.getNumFound());

    System.out.println(su.getDocs().size());

    for (Node doc : su.getDocs()) {

    System.out.println(valueOf(doc, "id"));

    System.out.println(valueOf(doc, "title"));

    System.out.println(dateValueOf(doc, "pubtime"));

    }



    }



    }



    參考資料:

    1Apache Solr 的新特性

    http://www.ibm.com/developerworks/cn/java/j-solr-update/



    2Solr開發經驗[]

    http://www.jinsehupan.com/blog/?p=25



    3slf4j-jdk14-1.5.5.jarslf4j-api-1.5.5.jarsolr-dataimporthandler-1.4-SNAPSHOT.jar

    https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-jdk14-1.5.5.jar

    https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-api-1.5.5.jar

    http://people.apache.org/repo/m2-snapshot-repository/org/apache/solr/solr-dataimporthandler/1.4-SNAPSHOT/solr-dataimporthandler-1.4-SNAPSHOT.jar



    4、本文地址

    http://docs.google.com/View?id=ajfmzbdvh8wz_37f4jv46gb








    posted on 2009-06-28 01:19 rox 閱讀(3114) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 国产午夜亚洲精品理论片不卡| 亚洲国产成人片在线观看无码 | 日韩在线一区二区三区免费视频 | 色欲色欲天天天www亚洲伊| 亚洲精品视频在线观看你懂的| 久久久久久一品道精品免费看| 亚洲天堂2016| 亚洲精品在线视频| 777成影片免费观看| 精品特级一级毛片免费观看| 精品亚洲综合久久中文字幕| 全免费a级毛片免费看不卡| 免费看少妇高潮成人片| 亚洲av永久无码| 亚洲日韩国产精品无码av| 亚洲精品线路一在线观看| 国产成人福利免费视频| 亚洲免费日韩无码系列| 亚洲永久网址在线观看| 亚洲AV无码码潮喷在线观看| 国产极品美女高潮抽搐免费网站| 免费成人在线电影| 色妞www精品视频免费看| 亚洲冬月枫中文字幕在线看| 亚洲精品无码久久千人斩| 日韩午夜免费视频| 国产一卡二卡四卡免费| 久久免费高清视频| 七次郎成人免费线路视频| 在线观看亚洲AV日韩A∨| 亚洲色图古典武侠| 亚洲欧洲日产国码无码久久99| 国产青草视频免费观看97| 国产无人区码卡二卡三卡免费| 久久免费国产视频| 三级黄色在线免费观看| 免费又黄又爽又猛大片午夜| 精品亚洲av无码一区二区柚蜜| 亚洲人成在线播放| 亚洲欧洲国产精品久久| 久久亚洲精品国产精品黑人|