solr從資料庫
㈠ 關於solr的導入資料庫不能查詢的問題
首先,先查看數據是否導入
再次查詢就可以查到了。
㈡ solr怎麼把資料庫數據導入索引庫
在solr與tomcat整合文章中,我用的索引庫是mycore,現在就以這個為例。
首先要准備jar包:solr-dataimporthandler-4.8.1.jar、solr-dataimporthandler-extras-4.8.1.jar和mysql-connector-java-5.0.7-bin.jar這三個包到solr的tomcat的webapps\solr\WEB-INF\lib下
在這個文件夾的conf下配置兩個文件,添加一個文件。先配置solrconfig.xml。
在該文件下添加一個新節點。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
在solrconfig.xml的同目錄下創建data-config.xml。
配置:
復制代碼
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/courseman"
user="root"
password="mysql" />
<document>
<entity name="student"
query="SELECT * FROM student">
<field column="id" name="id" />
<field column="name" name="name" />
<field column="gender" name="gender" />
<field column="major" name="major" />
<field column="grade" name="grade" />
</entity>
</document>
</dataConfig>
復制代碼
schemal.xml的配置
復制代碼
<?xml version="1.0" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding right ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<schema name="example core one" version="1.1">
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<!-- general -->
<field name="id" type="int" indexed="true" stored="true" />
<field name="gender" type="string" indexed="true" stored="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="major" type="string" indexed="true" stored="true" />
<field name="grade" type="string" indexed="true" stored="true" />
<field name="_version_" type="long" indexed="true" stored="true"/>
<!-- field to use to determine and enforce document uniqueness. -->
<uniqueKey>id</uniqueKey>
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<defaultSearchField>name</defaultSearchField>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="OR"/>
</schema>
復制代碼
默認的文件不是這樣的,稍微改動了一下。
field 的type類型是根據fieldtype 的name定義的。class是solr自定義的不能更改。
shcema.xml文件的field欄位的屬性介紹:
(1)name:欄位名稱
(2)type:欄位類型(此處type不是java類型,而是下面定義的fieldType)
(3)indexed:是否索引看true--solr會對這個欄位進行索引,只有經過索引的欄位才能被搜索、排序等;false--不索引
(4)stored:是否存儲看true--存儲,當我們需要在頁面顯示此欄位時,應設為true,否則false。
(5)required:是否必須看true--此欄位為必需,如果此欄位的內容為空,會報異常;false--不是必需
(6)multiValued:此欄位是否可以保存多個值看
(7)omitNorms:是否對此欄位進行解析看有時候我們想通過某個欄位的完全匹配來查詢信息,那麼設置 indexed="true"、omitNorms="true"。
(8)default:設置默認值
有這樣一個FieldType描述:
<fieldType name="text_general" positionIncrementGap="100">
<analyzer type="index">
<tokenizer/>
<filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter/>
</analyzer>
<analyzer type="query">
<tokenizer/>
<filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter/>
</analyzer>
</fieldType>
屬性說明:
(1)name:類型名稱,<field>中的type引用的就是這個name
(2)class:solr自定義的類型
(3)<analyzer type="index">定義建立索引時使用的分詞器及過濾器
(4)<analyzer type="query">定義搜索時所使用的分詞器及過濾器
(5)<tokenizer/>定義分詞器
(6)<filter/>定義過濾器
uniqueKey屬性
<uniqueKey>id</uniqueKey>
類似於數據表數據的id,solr索引庫中最好定義一個用於標示document唯一性的欄位,此欄位主要用於刪除document。
defaultSearchField屬性
就是你在做query搜尋時若不指定特定欄位做檢索時, Solr就會只查這個欄位.
<defaultSearchField>default</defaultSearchField>
Field屬性
是用來復制你一個欄位里的值到另一欄位用. 如你可以將name里的東西到major里, 這樣solr做檢索時也會檢索到name里的東西.
<Field source="name" dest="major"/>
現在可以將資料庫的數據導入solr了。
點擊Execute就可以了。
㈢ solr中的數據從哪兒來
solr的數據有很多來源方式,資料庫只是其中一種,可以看著這個Solr安裝部署
㈣ 如何配置solr的javabin方式創建創建索引
用solr從資料庫建立中文索引
1.在Ubuntu下安裝mysql服務端和客戶端。
#apt-get install mysql-server-5.0
#apt-get install mysql
2.添加Handler
編輯/opt/solr-tomcat/solr/conf文件夾下的solrconfig.xml文件,在config元素中添加
3. 在此文件夾中新建一個data-config.xml文件,內容如下
4. 修改schema.xml,找到<fieldType name="text",將分詞器修改為中文分詞器,這里用的是包裝過的Paoding分詞,這個東西好像已經不更新了,以後看看IKAnalyzer吧。
原來的schema.xml中沒有的欄位自己添加上。schema.xml默認是UTF-8編碼。首先在<fields></fields>里添加要索引的域。
㈤ solr已經與資料庫同步,怎樣在後台直接搜索
實現方式有2種,但是他們其實是對應的。
1.用lucene實現。
1.建索引, 多建一個索引欄位,即拼音和拼音首字母這2個欄位。合並的一個欄位。
(拼音和拼音首字母,可以通過pinyin4j.jar。將想要進行拼音搜索的欄位進行拼音轉換。)
2.對輸入的參數判斷是否是拼音,(可以通過將傳人的值轉換為 utf-8 形式,如果轉換後的字元串長度大於原來的字元串的長度,那麼就不是拼音。否則就進行拼音查詢)
3.對拼音索引那個欄位進行查詢,和中文查詢一樣。參考中文查詢。
2.solr實現。
㈥ solr的數據怎麼來的
solr是一個全文檢索資料庫
對外提供了數據讀取和寫入的介面
數據當然主要是從介面來 主要是http通信,
你要按solr文檔數據提交格式來寫入數據
細節要查文檔了
㈦ 有solr為什麼還要使用資料庫
solr不安全,沒事務 ,沒有表關系
㈧ 有資料庫為什麼要solr
嚴格來說,lucene負責數據存儲,而solr只是一個引擎提供搜索和插入而已,跟資料庫的解釋器一樣,有什麼好處呢,比如一個資料庫有一個欄位存了1000個字,你想從這些字裡面搜一個詞的時候,普通的資料庫只會讓你使用like去查詢,他會遍歷每個字去模糊匹配,效率很低,而且有些是無法查詢的,當然除了像一些特殊的資料庫帶有分詞,比如postgresql,那lucene做的事情就是分詞,然後去匹配分詞的詞中是否有你想搜的詞就好了,當然了,為了提高這種檢索效率和內存節省底層做了很復雜的事情,可以這么簡單的認為,全文搜索這件事情上資料庫是無法滿足的
㈨ solr 怎麼讓從mysql導入的數據是json數組
1. 編寫配置文件
1)編寫 data-config-comment.xml,此文件用於描述如何查詢MySQL數據,如何將數據變換導入索引。
假設有一個資料庫叫mooc,其中有個表叫comment,代表學生的評論
其中:
entity對應MySQL資料庫表中的一行
query對應全庫導入的SQL查詢
queryImportQuery 對應增量導入的SQL查詢
deltaQuery對應增量導入獲取最新修改的行ID,這些ID用於 queryImportQuery,SQL的含義中
DATE(updatetime) >= '${dih.last_index_time}' OR DATE(writetime) >= '${dih.last_index_time}
表示comment的更新時間updatetime,或者comment的寫入時間writetime比上一次的導入時間$(dih.last_index_time)還大。
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/mooc"
user="root"
password="root"/>
<document>
<entity name="comment"
query="SELECT id, DATE_FORMAT(writetime, '%Y-%m-%dT%TZ') as 'writetime', title from comment"
deltaImportQuery="SELECT id, DATE_FORMAT(writetime, '%Y-%m-%dT%TZ') as 'writetime', title from comment where id='${dih.delta.id}'"
deltaQuery="SELECT id FROM comment WHERE DATE(updatetime) >= '${dih.last_index_time}' OR DATE(writetime) >= '${dih.last_index_time}'">
<field column="id" name="id"/>
<field column="writetime" name="writetime"/>
<field column="title" name="title"/>
</entity>
</document>
</dataConfig>
2)假設要創建一個名為mooc的solr核,在其conf目錄中的schema.xml文件中編寫fields,加入id,writetime,title,其中text_cn,需要使用我上一則博客寫的中文分詞插件。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="writetime" type="tdate" indexed="true" stored="true"/>
<field name="title" type="text_cn" indexed="true" stored="true"/>
3) 配置Solr的 solrconfig.xml
在 D:\libs\solr-4.10.2\example\solr\mooc\conf 目錄中,創建data-config-comment.xml
在solrconfig.xml中創建數據導入handler用來導入comment表,如下編寫,其中的data-config-comment.xml即是第1步寫的
<requestHandler name="/dataimportcomment" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config-comment.xml</str>
</lst>
</requestHandler>
2.配置使用到的JAVA庫文件
創建D:\libs\solr-4.10.2\example\solr\mooc\lib,拷貝solr-dataimporthandler-4.10.2和mysql-connector-java-5.1.26-bin到此,這兩個庫用於導入和查詢資料庫
3.啟動Solr
進入solr的example目錄
java -jar start.jar
3.導入為索引數據
在瀏覽器運行如下命令做全庫導入,表示將數據,導入到Solr核mooc中
http://localhost:8983/solr/mooc/dataimportcomment?command=full-import&commit=y
如果帶clean=false參數,則表示不刪除原數據
增量導入
http://localhost:8983/solr/mooc/dataimportcomment?command=delta-import
4.刪除索引文件
編寫一個XML文件,內容為
<delete><query>*:*</query></delete>
執行命令
㈩ 如何保證solr跟資料庫的數據一致性
可以通過定時任務實現solr與資料庫數據的的一致性、比如每天夜裡某個時間點、對數據進行更新同步。更新分兩種、一種叫增量,是在之前的數據的基礎上,將變動的數據進行更新;另一種叫全量更新、是直接刪除原來的數據、全部導入新的數據。。。我就知道這些