<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 閱讀(3113) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 一边摸一边爽一边叫床免费视频| 乱爱性全过程免费视频| 日本午夜免费福利视频| 中文日本免费高清| 亚洲免费福利视频| 亚洲综合色婷婷七月丁香| 2022久久国产精品免费热麻豆| 亚洲精品中文字幕| 久久久久亚洲av无码专区蜜芽| 嫩草视频在线免费观看| 最新亚洲成av人免费看| 亚洲日本一线产区和二线 | 亚洲综合色婷婷七月丁香| 国产大片线上免费观看| 亚洲精品偷拍视频免费观看| 亚洲欧洲精品久久| 中文字幕亚洲一区二区va在线| 日韩免费a级毛片无码a∨| 国内精品99亚洲免费高清| 亚洲欧美成人一区二区三区| 久久精品国产精品亚洲艾草网 | 亚洲成A人片在线观看WWW| 国产又长又粗又爽免费视频| 一区二区三区四区免费视频| 色老头综合免费视频| 亚洲制服丝袜第一页| 亚洲成av人在线视| 亚洲男人在线无码视频| 成人毛片18女人毛片免费96| 95免费观看体验区视频| XXX2高清在线观看免费视频| 在线亚洲v日韩v| 亚洲色欲色欱wwW在线| 亚洲另类春色国产精品| 亚洲无线电影官网| 亚洲乱色熟女一区二区三区丝袜 | 可以免费观看一级毛片黄a| 成人影片麻豆国产影片免费观看| 久久久久久国产精品免费免费男同 | 久久久久亚洲AV无码专区体验| 亚洲欧洲∨国产一区二区三区|