日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

solr6.2从环境部署到与mysql整合到中文分词器到solrJ的使用

發(fā)布時間:2023/12/18 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 solr6.2从环境部署到与mysql整合到中文分词器到solrJ的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

solr就不多介紹了。是用于搜索功能的開源工具,很強大

?

一、solr環(huán)境部署

solr本身能夠用jetty啟動,但是還是用tomcat啟動比較適合我自己。學習solr有兩個星期了,到現在(2016.11.27)solr最新版已經是6.3.0了,不過沒關系,基本的東西都是一樣的。

1、solr官網:?http://lucene.apache.org/solr/

下載后解壓,是這樣的目錄結構:


2、solr當然可以直接按網上其他很多教程那樣整合到tomcat中,但是本人更喜歡建一個新工程,這樣更靈活。下面我們在eclipse中新建一個tomcat-solr的java web工程,不過這里要注意,要把這個工程的訪問路徑變成solr,不能是tomcat-solr,因為solr的管理頁面中,solr的開發(fā)者把這個目錄寫死了,我們要把訪問路徑改成solr,也就是:http://localhost:8080/solr/index.html ,怎么改呢:

在eclipse中:



?

下面我們進行如下操作:

1)將solr-6.2.1\server\solr-webapp\webapp下的內容copy到我們web工程的webapp下

2)將solr-6.2.1\server\lib\ext下的jar包,copy到我們的tomcat-solr功能中

3)將solr-6.2.1\server\resources\log4j.properties文件copy到tomcat-solr功能的src中,

4)在tomcat-solr工程的webapp文件夾下,新建文件夾solrhome,將solr-6.2.1\server\solr下的文件夾以及文件copy到solrhome中,

5)修改web.xml文件,修改env-entry-value的值為solrhome的絕對位置,如:



?6)啟動tomcat,訪問http://localhost:8080/solr/index.html


到此,solr部署完畢。
我們的tomcat-solr功能應該長得如此帥:


?

對了,solr支持zookeeper搭建集群配置,在這里我們先注釋掉,在solrhome文件夾下的solr.xml文件中,

?

Xml代碼??
  • <solr>??
  • <!--?注解掉zookeeper搭建集群配置,采用master-slave的形式??
  • ??<solrcloud>??
  • ??
  • ????<str?name="host">${host:}</str>??
  • ????<int?name="hostPort">${jetty.port:8983}</int>??
  • ????<str?name="hostContext">${hostContext:solr}</str>??
  • ??
  • ????<bool?name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>??
  • ??
  • ????<int?name="zkClientTimeout">${zkClientTimeout:30000}</int>??
  • ????<int?name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>??
  • ????<int?name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>??
  • ????<str?name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>??
  • ????<str?name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>??
  • ??
  • ??</solrcloud>??
  • ??
  • ??<shardHandlerFactory?name="shardHandlerFactory"??
  • ????class="HttpShardHandlerFactory">??
  • ????<int?name="socketTimeout">${socketTimeout:600000}</int>??
  • ????<int?name="connTimeout">${connTimeout:60000}</int>??
  • ??</shardHandlerFactory>??
  • -->??
  • </solr>??
  • ?

    ?

    ?

    ?二、core配置

    solr的core非常重要,還有什么多core什么的,由于我也是剛剛學習,還沒有搞明白,這里只是能夠用最簡單的,我們將在solrhome文件夾下,新建文件夾:my_solr,然后將solr-6.2.1\example\example-DIH\solr\solr下的文件以及文件夾copy到my_solr下,


    ?

    訪問剛才的地址:
    ?

    三、整合mysql

    1、首先我們在mysql中建個表作為練習,

    ?

    Sql代碼??
  • CREATE?TABLE?`solrTest`?(??
  • ??`solrID`?int(11)?NOT?NULL?AUTO_INCREMENT?COMMENT?'ID',??
  • ??`context`?varchar(255)?DEFAULT?NULL?COMMENT?'context',??
  • ??`updateTime`?datetime?DEFAULT?NULL?COMMENT?'updateTime',??
  • ??`sort`?int(11)?DEFAULT?'1'?COMMENT?'排序',??
  • ??PRIMARY?KEY?(`solrID`)??
  • )?DEFAULT?CHARSET=utf8;??
  • ?

    2、將mysql的驅動jar包,copy到我們tomcat-solr功能中(lib文件夾下,這個們問題的吧),

    3、修改my_solr文件夾下的conf文件夾下的solr-data-config.xml文件:

    ?

    Xml代碼??
  • <dataConfig>??
  • ??
  • ??<dataSource?type="JdbcDataSource"???
  • ????driver="com.mysql.jdbc.Driver"???
  • ????url="jdbc:mysql://localhost:3306/test"???
  • ????user="root"???
  • ????password="123456"/>??
  • ??????
  • ??<document?name="solr_mysql_test">??
  • ????<entity?name="solrTest"???
  • ????????pk="solrID"???
  • ????????query="select?*?from?solrTest"???
  • ????????deltaImportQuery="select?*?from?solrTest?where?solrID?=?'${dih.delta.solrID}'"???
  • ????????deltaQuery="select?solrID?from?solrTest?where?updateTime?>?'${dataimporter.last_index_time}'"/>??
  • ??????????????
  • ??????<field?column="solrID"?name="solrID"/>????
  •    ????<field?column="context"?name="context"/>????
  • ??????<field?column="updateTime"?name="updateTime"/>???
  • ??????<field?column="sort"?name="sort"/>???
  • ????????
  • ??</document>??
  • </dataConfig>??
  • ?這里面的內容具體什么意思,網上有很多專門介紹的文章博客,這里就不多說了

    ?

    4、修改conf文件夾下的managed-schema文件,在schema標簽下添加field

    ?

    Xml代碼??
  • <field?name="solrID"?type="string"?required="true"?indexed="true"?stored="true"?multiValued="false"/>??
  • <field?name="context"?type="string"?indexed="true"?stored="true"?multiValued="false"/>??
  • <field?name="updateTime"?type="date"?indexed="true"?stored="true"?multiValued="false"/>??
  • <field?name="sort"?type="int"?indexed="true"?stored="true"?multiValued="false"/>??
  • ?這里面name對應solr-data-config.xml中的name,要一直,否則solr就找不到字段了,

    ?

    type是類型,indexed代表是否可用于檢索,stored代表是否存儲,multiValued代表是否有多個值,除此之外還有很多字段,讀者可以移步度娘。

    (另外說一下,我這里用的其實是schema.xml,而不是managed-schema文件,不過感覺都是一個樣)

    ?

    下面,看下我們的成就(別忘了mysql填點數據哦,否則啥也看不出來):

    先刷新下solr數據:



    ?

    然后查數據:



    ?

    四、下面,我們看看中文分詞器

    solr本分提供了很多分詞器(不過對中文的分詞實在不能用,憤怒!!!),對了,那么什么是分詞呢?比如“數據結構”這個詞,沒分詞前,solr就按“數據結構”這個詞查(有點像mysql的=),中文分詞后,就按“數據”,“結構”這兩個詞查(有點像like),這樣更符合我們的搜索習慣

    有很多支持solr中文分詞的jar包,比如我們用的IKAnalyzer中文分詞器

    我們首先導入IKAnalyzer的jar包,注意IKAnalyzer的jar包要與solr版本對應,否則會execption的,

    然后在managed-schema文件的最后:

    ?

    Xml代碼??
  • ???<!--?IKAnalyzer中文分詞器.如果版本與solr對應不上,會報抽象方法錯誤?-->??
  • <fieldType?name="text_ik"?class="solr.TextField">??
  • ????<!--索引時候的分詞器-->??
  • ????<analyzer?type="index"?isMaxWordLength="false"?class="org.wltea.analyzer.lucene.IKAnalyzer"/>??
  • ????<!--查詢時候的分詞器-->??
  • ????<analyzer?type="query"?isMaxWordLength="true"?class="org.wltea.analyzer.lucene.IKAnalyzer"/>??
  • </fieldType>??
  • ?在然后,比如我們數據庫表中的context字段要進行分詞,那么修改field:

    ?

    ?

    Java代碼??
  • <field?name="context"?type="text_ik"?indexed="true"?stored="true"?multiValued="false"/>??
  • ?也就是修改type為分詞器的name

    ?

    ?

    這時我們在去solr查詢一下,我們先填幾條數據:



    ?去看看成果:



    ?五、solrJ是連接我們java工程和solr的工具jar包,很實用

    簡單的使用示例:

    ?

    Java代碼??
  • public?class?SolrQueryTest?{??
  • ??????
  • ????//solr?服務器地址????
  • ????public?static?final?String?solrServerUrl?=?"http://localhost:8080/solr";????
  • ??????
  • ????//solrhome下的core????
  • ????public?static?final?String?solrCroeHome?=?"my_solr";????
  • ??????
  • ????@SuppressWarnings({?"resource",?"deprecation"?})??
  • ????public?static?void?main(String[]?args)?{??
  • ????????try?{??
  • ????????????//SolrClient?client?=?new?HttpSolrClient(solrServerUrl?+?"/"?+?solrCroeHome);??
  • ????????????//QueryResponse?resp?=?client.query(new?SolrQuery("*:*"));??
  • ??????????????
  • ????????????SolrClient?client?=?new?HttpSolrClient(solrServerUrl);??
  • ????????????QueryResponse?resp?=?client.query(solrCroeHome,?new?SolrQuery("*:*"));??
  • ????????????List<TestBean>?lists?=??resp.getBeans(TestBean.class);??
  • ????????????System.out.println(lists);??
  • ????????}?catch?(SolrServerException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}?catch?(IOException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • }??
  • ?bean(注意要有solrJ的注解):

    ?

    ?

    Java代碼??
  • public?class?TestBean?{??
  • ??
  • ????@Field("solrID")??
  • ????private?String?solrID;??
  • ??????
  • ????@Field("context")??
  • ????private?String?context;??
  • ??????
  • ????@Field("updateTime")??
  • ????private?Date?updateTime;??
  • ??
  • ????public?String?getSolrID()?{??
  • ????????return?solrID;??
  • ????}??
  • ??
  • ????public?void?setSolrID(String?solrID)?{??
  • ????????this.solrID?=?solrID;??
  • ????}??
  • ??
  • ????public?String?getContext()?{??
  • ????????return?context;??
  • ????}??
  • ??
  • ????public?void?setContext(String?context)?{??
  • ????????this.context?=?context;??
  • ????}??
  • ??
  • ????public?Date?getUpdateTime()?{??
  • ????????return?updateTime;??
  • ????}??
  • ??
  • ????public?void?setUpdateTime(Date?updateTime)?{??
  • ????????this.updateTime?=?updateTime;??
  • ????}??
  • ??
  • }??
  • ?solr在查詢時,也有很多方法,能夠設置查詢的條件,比如分頁、分片檢索、結果的過濾條件、排序等,下面只是一個示例,我一個功能的代碼片段:

    ?

    ?

    Java代碼??
  • /**?
  • ?*?設置查詢信息?
  • ?*/??
  • ???????solrQuery.setQuery(this.getQueryFields(keyWord));????//設置基本查詢??
  • ?????????
  • ???????/**?
  • ????????*?設置查詢條件?
  • ????????*/??
  • ???????solrQuery.setFilterQueries(this.getFielder(condition));??
  • ?????????
  • ???????/**?
  • ????????*?分頁?
  • ????????*/??
  • ???????solrQuery.setStart(pInteger);??
  • ???????solrQuery.setRows(systemConfigureUtil.getSolrRow());??
  • ??????
  • ???????/**?
  • ????????*?分片檢索(分類檢索)——?
  • ????????*/??
  • ???????solrQuery.setFacet(systemConfigureUtil.isFacet());??
  • ???????solrQuery.add("facet.field",?systemConfigureUtil.getFacetStr());?//可以按多個字段分類,用逗號分隔??
  • ??
  • ???????/**?
  • ????????*?設置過濾結果——能查詢出那些字段?
  • ????????*/??
  • ???????solrQuery.add("fl",?systemConfigureUtil.getFilterFields());??
  • ?????????
  • ???????/**?
  • ????????*?排序,注意是有順序的?
  • ????????*/??
  • ???????solrQuery.setSort(this.getSort(0));??//setSort()會覆蓋之前的查詢條件??
  • ???????solrQuery.addSort("sort",?SolrQuery.ORDER.desc);?//addSort()不會覆蓋之前的查詢條件??
  • ?

    ?

    到此,我學到的solr的東西也就這些了,還會繼續(xù)學習的。

    ?

    我搭建好的tomcat-solr功能在我的github中:https://github.com/hejiawang/tomcat-solr

    solrJ的練習工程:https://github.com/hejiawang/search-web

    文章來源:http://hejiawangjava.iteye.com/blog/2341372

    總結

    以上是生活随笔為你收集整理的solr6.2从环境部署到与mysql整合到中文分词器到solrJ的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。