當前位置:首頁 » 數據倉庫 » solr配置資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

solr配置資料庫

發布時間: 2022-09-25 20:44:14

1. 如何用Solr搭建大數據查詢平台

0×00 開頭照例扯淡

自從各種脫褲門事件開始層出不窮,在下就學乖了,各個地方的密碼全都改成不一樣的,重要帳號的密碼定期更換,生怕被人社出祖宗十八代的我,甚至開始用起了假名字,我給自己起一新網名地興才地,這個看起來還不錯的名字,其實是我們家鄉罵人土話,意思是腦殘人士…. -_-|||額好吧,反正是假的,不要在意這些細節。

這只是名,至於姓氏么,每個帳號的注冊資料那裡,照著百家姓上趙錢孫李周吳鄭王的依次往下排,什麼張興才、李興才、王興才……於是也不知道我這樣地興才地了多久,終於有一天,我接到一個陌生電話:您好,請問是馬興才先生嗎?

好么,該來的終於還是來了,於是按名索驥,得知某某網站我用了這個名字,然後通過各種途徑找,果然,那破站被脫褲子了。
果斷Down了那個褲子,然後就一發不可收拾,走上了收藏褲子的不歸路,直到有一天,我發現收藏已經非常豐富了,粗略估計得好幾十億條數據,拍腦袋一想,這不能光收藏啊,我也搭個社工庫用吧……

0×01 介紹

社工庫怎麼搭呢,這種海量數據的東西,並不是簡單的用mysql建個庫,然後做個php查詢select * from sgk where username like 『%xxxxx%』這樣就能完事的,也不是某些幼稚騷年想的隨便找個4g內存,amd雙核的破電腦就可以帶起來的,上面這樣的語句和系統配置,真要用於社工庫查詢,查一條記錄恐怕得半小時。好在這個問題早就被一種叫做全文搜索引擎的東西解決了,更好的消息是,全文搜索引擎大部分都是開源的,不需要花錢。

目前網上已經搭建好的社工庫,大部分是mysql+coreseek+php架構,coreseek基於sphinx,是一款優秀的全文搜索引擎,但缺點是比較輕量級,一旦數據量過數億,就會有些力不從心,並且搭建集群做分布式性能並不理想,如果要考慮以後數據量越來越大的情況,還是得用其他方案,為此我使用了solr。

Solr的基礎是著名的Lucene框架,基於java,通過jdbc介面可以導入各種資料庫和各種格式的數據,非常適合開發企業級的海量數據搜索平台,並且提供完善的solr cloud集群功能,更重要的是,solr的數據查詢完全基於http,可以通過簡單的post參數,返回json,xml,php,python,ruby,csv等多種格式。

以前的solr,本質上是一組servlet,必須放進Tomcat才能運行,從solr5開始,它已經自帶了jetty,配置的好,完全可以獨立使用,並且應付大量並發請求,具體的架構我們後面會講到,現在先來進行solr的安裝配置。

0×02 安裝和配置

以下是我整個搭建和測試過程所用的硬體和軟體平台,本文所有內容均在此平台上完成:

軟體配置: solr5.5,mysql5.7,jdk8,Tomcat8 Windows10/Ubuntu14.04 LTS

硬體配置: i7 4770k,16G DDR3,2T西數黑盤

2.1 mysql資料庫

Mysql資料庫的安裝和配置我這里不再贅述,只提一點,對於社工庫這種查詢任務遠遠多於插入和更新的應用來說,最好還是使用MyISAM引擎。
搭建好資料庫後,新建一個庫,名為newsgk,然後創建一個表命名為b41sgk,結構如下:

id bigint 主鍵 自動增長

username varchar 用戶名

email varchar 郵箱

password varchar 密碼

salt varchar 密碼中的鹽或者第二密碼

ip varchar ip、住址、電話等其他資料

site varchar 資料庫的來源站點

接下來就是把收集的各種褲子全部導入這個表了,這里推薦使用navicat,它可以支持各種格式的導入,具體過程相當的枯燥乏味,需要很多的耐心,這里就不再廢話了,列位看官自己去搞就是了,目前我初步導入的數據量大約是10億條。

2.2 Solr的搭建和配置

首先下載solr:
$ wget

解壓縮:
$ tar zxvf solr-5.5.0.tgz

安裝jdk8:
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ sudo apt-get install oracle-java8-set-default

因為是java跨平台的,Windows下和linux下solr是同一個壓縮包,windows下jdk的安裝這里不再說明。

進入解壓縮後的solr文件夾的bin目錄,solr.cmd和solr分別是windows和linux下的啟動腳本

因為社工庫是海量大數據,而jvm默認只使用512m的內存,這遠遠不夠,所以我們需要修改,打開solr.in.sh文件,找到這一行:

SOLR_HEAP=地512m地

依據你的數據量,把它修改成更高,我這里改成4G,改完保存. 在windows下略有不同,需要修改solr.in.cmd文件中的這一行:

set SOLR_JAVA_MEM=-Xms512m -Xmx512m

同樣把兩個512m都修改成4G。

Solr的啟動,重啟和停止命令分別是:
$ ./solr start
$ ./solr restart –p 8983
$ ./solr stop –all

在linux下還可以通過install_solr_service.sh腳本把solr安裝為服務,開機後台自動運行。

Solr安裝完成,現在我們需要從mysql導入數據,導入前,我們需要先創建一個core,core是solr的特有概念,每個core是一個查詢、數據,、索引等的集合體,你可以把它想像成一個獨立資料庫,我們創建一個新core:

在solr-5.5.0/server/solr子目錄下面建立一個新文件夾,命名為solr_mysql,這個是core的名稱,在下面創建兩個子目錄conf和data,把solr-5.5.0/solr-5.5.0/example/example-DIH/solr/db/conf下面的所有文件全部拷貝到我們創建的conf目錄中.接下來的配置主要涉及到三個文件, solrconfig.xml, schema.xml和db-data-config.xml。

首先打開db-data-config.xml,修改為以下內容:
<dataConfig>
<dataSource name="sgk" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/newsgk" user="root" password="password" batchSize="-1" />
<document name="mysgk">
<entity name="b41sgk" pk="id" query="select * from b41sgk">
<field column="id" name="id"/>
<field column="username" name="username"/>
<field column="email" name="email"/>
<field column="password" name="password"/>
<field column="salt" name="salt"/>
<field column="ip" name="ip"/>
<field column="site" name="site"/>
</entity>
</document>
</dataConfig>

這個文件是負責配置導入數據源的,請按照mysql實際的設置修改datasource的內容,下面entity的內容必須嚴格按照mysql中社工庫表的結構填寫,列名要和資料庫中的完全一樣。

然後打開solrconfig.xml,先找到這一段:
<schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory>

把它全部注釋掉,加上一行,改成這樣:
<!-- <schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory>-->
<schemaFactory class="ClassicIndexSchemaFactory"/>

這是因為solr5 以上默認使用managed-schema管理schema,需要更改為可以手動修改。

然後我們還需要關閉suggest,它提供搜索智能提示,在社工庫中我們用不到這樣的功能,重要的是,suggest會嚴重的拖慢solr的啟動速度,在十幾億數據的情況下,開啟suggest可能會導致solr啟動載入core長達幾個小時!

同樣在solrconfig.xml中,找到這一段:

<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str> <!-- org.apache.solr.spelling.suggest.fst -->
<str name="dictionaryImpl">DocumentDictionaryFactory</str> <!-- org.apache.solr.spelling.suggest. -->
<str name="field">cat</str>
<str name="weightField">price</str>
<str name="suggestAnalyzerFieldType">string</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>

把這些全部刪除,然後保存solrconfig.xml文件。

接下來把managed-schema拷貝一份,重命名為schema.xml (原文件不要刪除),打開並找到以下位置:

只保留_version_和_root_節點,然後把所有的field,dynamicField和Field全部刪除,添加以下的部分:
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="username" type="text_ik" indexed="true" stored="true"/>
<field name="email" type="text_ik" indexed="true" stored="true"/>
<field name="password" type="text_general" indexed="true" stored="true"/>
<field name="salt" type="text_general" indexed="true" stored="true"/>
<field name="ip" type="text_general" indexed="true" stored="true"/>
<field name="site" type="text_general" indexed="true" stored="true"/>
<field name="keyword" type="text_ik" indexed="true" stored="false" multiValued="true"/>

<Field source="username" dest="keyword"/>
<Field source="email" dest="keyword"/>
<uniqueKey>id</uniqueKey>

這里的uniqueKey是配置文件中原有的,用來指定索引欄位,必須保留。新建了一個欄位名為keyword,它的用途是聯合查詢,即當需要同時以多個欄位做關鍵字查詢時,可以用這一個欄位名代替,增加查詢效率,下面的Field即用來指定復制哪些欄位到keyword。注意keyword這樣的欄位,後面的multiValued屬性必須為true。

username和email以及keyword這三個欄位,用來檢索查詢關鍵字,它們的類型我們指定為text_ik,這是一個我們創造的類型,因為solr雖然內置中文分詞,但效果並不好,我們需要添加IKAnalyzer中文分詞引擎來查詢中文。在下載IKAnalyzer for solr5的源碼包,然後使用Maven編譯,得到一個文件IKAnalyzer-5.0.jar,把它放入solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目錄中,然後在solrconfig.xml的fieldType部分加入以下內容:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

保存後,core的配置就算完成了,不過要導入mysql數據,我們還需要在mysql網站上下載mysql-connector-java-bin.jar庫文件,連同solr-5.5.0/dist目錄下面的solr-dataimporthandler-5.5.0.jar,solr-dataimporthandler-extras-5.5.0.jar兩個文件,全部拷貝到solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目錄中,然後重啟solr,就可以開始數據導入工作了。

2. 如何使用Solr索引MySql資料庫

在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就可以了。

3. Solr 配置DataImport出錯的問題

可能是jar文件的路徑放錯了,jar文件不應該放在tomcat下的solr的lib里 而在SolrHome里新建lib文件夾把dataimport相關的Jar放進去即可解決。

4. 怎樣給solr添加資料庫數據進行索引

http://www.cnblogs.com/llz5023/archive/2012/11/15/2772154.html
請參考上文進行操作。

5. solr連接mysql資料庫怎麼用

<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory> -->

<!-- <processor class="solr.">
<str name="defaultFieldType">strings</str>
<lst name="typeMapping">
<str name="valueClass">java.lang.Boolean</str>
<str name="fieldType">booleans</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.util.Date</st

6. 如何在solr配置文件里添加新的搜索欄位

solr的三個配置文件:
1、solrconfig.xml
只配置一次就夠了

2、data-config.xml
配置資料庫與solr搜索的映射關系,需要按實際情況處理

3、schema.xml
配置solr搜索欄位

7. solr配置文件怎麼配置按照條件查詢

如何快速矯正

8. 如何使用solr配置來建立多張表的索引

以下資料整理自網路,以及查看solr幫助文檔。主要分為兩部分,第一部分是對《db-data-config.xml》的配置內容的講解(屬於高級內容),第二部分是DataImportHandler(屬於基礎),第三部分是對db-data-config.xml的進階

第一部分是對《db-data-config.xml》

query是獲取全部數據的SQL
deltaImportQuery是獲取增量數據時使用的SQL
deltaQuery是獲取pk的SQL
parentDeltaQuery是獲取父Entity的pk的SQLFull
Import工作原理:
執行本Entity的Query,獲取所有數據;
針對每個行數據Row,獲取pk,組裝子Entity的Query;
執行子Entity的Query,獲取子Entity的數據。Delta
Import工作原理:
查找子Entity,直到沒有為止;
執行Entity的deltaQuery,獲取變化數據的pk;
合並子Entity
parentDeltaQuery得到的pk;
針對每一個pk
Row,組裝父Entity的parentDeltaQuery;
執行parentDeltaQuery,獲取父Entity的pk;
執行deltaImportQuery,獲取自身的數據;
如果沒有deltaImportQuery,就組裝Query限制:
子Entity的query必須引用父Entity的pk
子Entity的parentDeltaQuery必須引用自己的pk
子Entity的parentDeltaQuery必須返回父Entity的pk
deltaImportQuery引用的必須是自己的pk第二部分是DataImportHandler

關於DataImportHandler的具體使用方法,詳見下文,如果你英文超級好,那看這個鏈接吧:http://wiki.apache.org/solr/DataImportHandler大多數的應用程序將數據存儲在關系資料庫、xml文件中。對這樣的數據進行搜索是很常見的應用。所謂的DataImportHandler提供一種可配置的方式向solr導入數據,可以一次全部導入,也可以增量導入。

概覽

目標

能夠讀取關系資料庫中的數據。

通過可配置的方式,能夠將資料庫中多列、多表的數據生成solr文檔

能夠通過solr文檔更新solr

提供 通過配置文件就能夠導入所有數據的能力

能夠發現並處理
由insert、update帶來的變化(我們假定在表中有一個叫做「last-modified的列」)

能夠配置 「完全導入」和「增量導入」的時間

讓讀取xml文件,並建立索引成為可配置。

能夠將
其他的數據源(例如:ftp,scp,etc)或者其他格式的文檔(Json,csv)以插件的形式集成到項目中。

設計思路

這個Handler首先要在solrconfig.xml文件中配置下,如下所示。


<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">/home/username/data-config.xml</str>
</lst>
</requestHandler>從它的名字上,我們或許也可以猜到,
DataImportHandler正是requestHandler的實現。我們一共需要在兩個地方配置文件中進行一些配置。

solrconfig.xml 。
data-config.xml必須在這個文件中配置,datasource也可以。不過,一般將datasource放在data-config.xml文件中。

data-config.xml怎樣獲取數據?(查詢語句、url等等)

要讀什麼樣的數據(關系資料庫中的列、或者xml的域)

做什麼樣的處理(修改/添加/刪除)

跟關系資料庫一起使用

下面幾個步驟是必要的.

定義一個data-config.xml 文件,並這個它的路徑配置到solrconfig.xml
中關於DataImportHandler的配置中。

給出Connection的信息(假設你選擇在solrconfig中配置datasource)

打開DataImportHandler頁面去驗證,是否該配置的都配置好了。http://localhost:8983/solr/dataimport

使用「完全導入」命令將數據從資料庫中導出,並提交給solr建立索引

使用「增量導入」命令對資料庫發生的變化的數據導出,並提交給solr建立索引。

配置數據源

將dataSource標簽直接添加到dataConfig下面,即成為dataConfig的子元素.


<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/dbname" user="db_username" password="db_password"/>數據源也可以配置在solrconfig.xml中

屬性type 指定了實現的類型。它是可選的。默認的實現是JdbcDataSource。

屬性 name 是datasources的名字,當有多個datasources時,可以使用name屬性加以區分

其他的屬性都是隨意的,根據你使用的DataSource實現而定。

當然 你也可以實現自己的DataSource。

多數據源

一個配置文件可以配置多個數據源。增加一個dataSource元素就可以增加一個數據源了。name屬性可以區分不同的數據源。如果配置了多於一個的數據源,那麼要注意將name配置成唯一的。

例如:

<dataSource type="JdbcDataSource" name="ds-1" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db1-host/dbname" user="db_username" password="db_password"/>

<dataSource type="JdbcDataSource" name="ds-2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db2-host/dbname" user="db_username" password="db_password"/>

然後這樣使用 ..

<entity name="one" dataSource="ds-1" ...>

..

</entity>

<entity name="two" dataSource="ds-2" ...>

..

</entity>

..

配置JdbcDataSource

JdbcDataSource中的屬性有

driver(必需的):jdbc驅動名稱

url(必需的):jdbc鏈接

user:用戶名

password:密碼

批量大小:jdbc鏈接中的批量大小

任何其他的在JdbcDataSource中配置的屬性,都會被直接傳給jdbc
driver

配置data-config.xml

solr
document是schema,它的域上的值可能來自於多個表.

data-config.xml的根元素是document。一個document元素代表了一種文檔。一個document元素中包含了一個或者多個root實體。一個root實體包含著一些子實體,這些子實體能夠包含其他的實體。實體就是,關系資料庫上的表或者視圖。每個實體都能夠包含多個域,每個域對應著資料庫返回結果中的一列。域的名字跟列的名字默認是一樣的。如果一個列的名字跟solr
field的名字不一樣,那麼屬性name就應該要給出。其他的需要的屬性在solrschema.xml文件中配置。

為了能夠從資料庫中取得想要的數據,我們的設計支持標准sql規范。這使得用戶能夠使用他任何想要的sql語句。root實體是一個中心表,使用它的列可以把表連接在一起。

dataconfig的結構

dataconfig的結構不是一成不變的,entity和field元素中的屬性是隨意的,這主要取決於processor和transformer。

以下是entity的默認屬性

name(必需的):name是唯一的,用以標識entity

processor:只有當datasource不是RDBMS時才是必需的。默認值是SqlEntityProcessor

transformer:轉換器將會被應用到這個entity上,詳情請瀏覽transformer部分。

pk:entity的主鍵,它是可選的,但使用「增量導入」的時候是必需。它跟schema.xml中定義的uniqueKey沒有必然的聯系,但它們可以相同。

rootEntity:默認情況下,document元素下就是根實體了,如果沒有根實體的話,直接在實體下面的實體將會被看做跟實體。對於根實體對應的資料庫中返回的數據的每一行,solr都將生成一個document。

一下是SqlEntityProcessor的屬性

query (required) :sql語句

deltaQuery : 只在「增量導入」中使用

parentDeltaQuery : 只在「增量導入」中使用

deletedPkQuery : 只在「增量導入」中使用

deltaImportQuery : (只在「增量導入」中使用) .
如果這個存在,那麼它將會在「增量導入」中導入phase時代替query產生作用。這里有一個命名空間的用法${dataimporter.delta.}詳情請看solr1.4.

9. 請教一下各位高手。。如果在solr中導入資料庫索引(有多個表),如下配置(db-data-config.xml)對嗎

schema.xml里配過 uniquekey 表示唯一值 默認是id 如果id相同那麼執行更新操作而不是添加了

10. solr配置文件core.properties怎麼生成

從5.0開始,solr採用了自動發現模式(discovery,區別於傳統模式legacy),Solr會自動找到安裝目錄中、或solr_home中的配置文件:core.properties,並根據裡面的name屬性來初始化相對於的core。solr.xml中仍然會定義一些配置參數,但是core本身不會定義在這個文件中。
Solr會遞歸搜索所有solr和solr_home目錄和子目錄,當在一個目錄中發現core.properties後,就停止搜索當前目錄的所有子目錄,轉向下一個同級目錄搜索。所以,下面兩個配置只有第一個生效:
./cores/core1/core.properties
./cores/core1/coremore/core5/core.properties
而下面三個配置,都會生效:
./cores/somecores/core1/core.properties
./cores/somecores/core2/core.properties
./cores/othercores/core3/core.properties
一個core.properties文件代表一個core。文件的內容可以是空的,這個時候,solr會把該文件所在的目錄作為name,比如跟./cores/core1/core.properties對應的core name就是core1;instanceDir就是./cores/core1;dataDir就是./cores/core1/data,等等。
core.properties配置參數:

name:SolrCore的名字
config:該core的配置文件名字,預設是solrconfig.xml
schema:schema文件的名字,預設是schema.xml
dataDir:索引文件的存放位置,相對於instanceDir的相對路徑,預設是「data」
configSet:configSet的名字
properties:該core的額外屬性文件的路徑和名字,可以是絕對路徑、或相對於instanceDir的相對路徑
transient:如果是true,當solr達到transientCacheSize這個限定時,這個core會被卸載(unload);預設是false,即使用LRU原則卸載。SolrCloud模式下true是不推薦的
loadOnStartup:預設是true,就是在solr啟動的時候啟動該core。SolrCloud模式下false是不推薦的
coreNodeName:只在SolrCloud的情況下使用,是這個replica所在的node的標識。這個名字預設是自動生成的。這個配置的名字可以在以後需要替換一個自動生成的名字的時候使用,比如使用一個新機器(新的hostname和port)替換一個壞機器的時候
ulogDir:存放update log的絕對或相對路徑(SolrCloud)
shard:這個core所歸屬的shard(SolrCloud)
collection:這個core所屬的collection名字(SolrCloud)

roles:SolrCloud的一個保留參數,未來可能會用到,或用戶用了做一些自己的標記
另外,用戶還可以定義自己的屬性,以作為其他配置文件的變數。
solr.xml配置標簽:
<solrcloud/>:定義幾個跟SolrCloud相關的參數,當solr啟動參數帶有-DzkRun 或 -DzkHost時,這個標簽才生效
<logging/>:定義跟日誌相關的配置參數
<shardHandlerFactory/>:配置自定義的shard handler
Config Sets:
在multicore的solr實例中,可以利用config set來提供統一的配置文件給各個core共享。這個可以通過在configSetBaseDir目錄下創建一個目錄來實現,該目錄的結構如下:
/<configSetBaseDir>
/configset1
/conf
/schema.xml
/solrconfig.xml
/configset2
/conf
/schema.xml
/solrconfig.xml
預設的configSetBaseDir就是$SOLR_HOME/configsets,也可以在solr.xml中指定這個目錄。
非SolrCloud模式下,可以通過CoreAdmin API,把configset作為參數來創建一個新的core,比如:
http://<solr>/admin/cores?action=CREATE&name=mycore&instanceDir=path/to/instanc e&configSet=configset2
如果是SolrCloud模式下,配置信息是從zookeeper資料庫中獲取的。