上一篇已經介紹了 solr 的基本操做。
傳送門: 搜索爲將 -- solr 入門
如今介紹如何 與數據庫 整合。html
這個文檔位於 solrhomenew_coreconf 下
如圖所示 :
java
這個文檔中能夠設置一些屬性,便於以後與數據庫整合後,在搜索中使用。mysql
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
Name:指定域的名稱
Type:指定域的類型 -- 指定使用的分詞器。
Indexed:是否索引
Stored:是否存儲
Required:是否必須
multiValued:是否多值,好比商品信息中,一個商品有多張圖片,一個Field像存儲多個值的話,必須將multiValued設置爲true。linux
動態域,經過 通配符 進行匹配sql
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
指定惟一鍵shell
<uniqueKey>id</uniqueKey>
其中的id 是在 Field標籤 中已經定義好的域名,並且該域要設置爲 required爲true 。
一個 schema.xml 文件中必須有且僅有一個惟一鍵.數據庫
從已有的 field中直接複製屬性,被複制的field 必須擁有multiValued = "true" 屬性。apache
<copyField source="cat" dest="text"/>
也就是設置的 field 域的類型。經過各類分詞器以及內置的類型設置。
經常使用類型都已經被設置好了,以下
若是還須要其餘類型的 域 ,經過分詞器設置。
能夠參考我 以前的文章.
搜索爲將 -- solr 入門
這裏介紹了 將 smart_cn 以及 IKAnalyzer 設置爲 相應的 field 域的方法.segmentfault
將 solr/dist 目錄下的 solr-dataimporthandler.jar 文件拷貝到 solrhome/contrib/dataimporthandler/lib 目錄下.
將 本身準備好的 mysql 鏈接的 jar 包 拷貝到 solrhome/contrib/db/lib 下
這裏是用 linux 創建的服務器,因此使用了 xshell 中的 xftp,幫助對文件進行管理tomcat
進入 core 文件夾 , 分別修改 solrConfig.xml 、 managed-scheme 文檔
solrConfig.xml 文檔下添加相應的內容
<!-- 新建相應的 lib 標籤 --> <lib dir="${solr.install.dir:../..}/contrib/dataimporthandler/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:../..}/contrib/db/lib" regex=".*\.jar" />
lib 的修改原則,個人上篇文章寫的很清楚,再也不闡述。
<!-- 添加相應的 requestHandler -- > <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
managed-scheme 文檔下添加 與 數據庫中的文件相應的屬性,以個人爲例。
<!-- IKAnalyzer --> <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> </analyzer> </fieldType> <!-- taotao_shop --> <field name="item_title" type="text_ik" indexed="true" stored="true"/> <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/> <field name="item_price" type="long" indexed="true" stored="true"/> <field name="item_image" type="string" indexed="false" stored="true" /> <field name="item_category_name" type="string" indexed="true" stored="true" /> <field name="item_desc" type="text_ik" indexed="true" stored="false" /> <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="item_title" dest="item_keywords"/> <copyField source="item_sell_point" dest="item_keywords"/> <copyField source="item_category_name" dest="item_keywords"/> <copyField source="item_desc" dest="item_keywords"/>
同級目錄下建立 data-config.xml 文件
在其中加入相應的內容
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.101:3306/taotao" user="root" password="1996915" /> <document> <entity name="item" query="SELECT id,title,sell_point,price,image FROM tb_item"> <field column="id" name="id"/> <field column="title" name="item_title"/> <field column="sell_point" name="item_sell_point"/> <field column="price" name="item_price"/> <field column="image" name="item_image"/> </entity> </document> </dataConfig>
而後打開 tomcat 。 進入網站 192.168.1.102:8080/solr/index.html,出現以下畫面
按照我在圖片上標明的 步驟 , 就能夠達到以下的效果。
問題:不一樣服務器部屬後, mysql 的訪問權限設置
詳情:由於個人 solr 服務器是在 虛擬機上 經過 靜態ip 地址的橋接設置的,因此 IP 地址與主機的 IP 地址不一樣,不能使用 localhost 做爲 域名。當我使用 192.168.1.101 (注: 我主機的 IP 地址)時, mysql 的用戶 root 沒有相應的訪問權限。如圖:
解決:那麼只須要從新建立一個用戶,並賦予相應的權限便可。
這樣,咱們就擁有了 root@% 帳戶, % 表明着全部的域名。
由於時間有限,先介紹到這裏。
等下次有時間,將 solr 與 java 的整合,以及 solr cloud 一塊兒進行總結。
stay hungry, stay foolish
與諸君共勉。
您的每一次點贊,關注都是對個人一種激勵。
個人我的博客 -- killCode謝謝。