午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

solr.in.action的indexing個(gè)人筆記

 折騰plus難受 2017-01-21
                          <solr in action>indexing個(gè)人筆記

solr的索引過程可概括為三個(gè)關(guān)鍵的任務(wù):

1.轉(zhuǎn)換一份文件從它的原始格式到支持的格式,如XML或者JSON

2.使用已定義好的其中一種接口的來添加此份文檔,典型是HTTP POST

3.索引期間,配置Solr來應(yīng)用轉(zhuǎn)換到文檔中的文本

見圖15102701.jpg



設(shè)計(jì)方案

關(guān)于你的搜索應(yīng)用,你要學(xué)會(huì)回答以下關(guān)鍵問題:

1.在你的索引中,文檔是什么

2.每份文檔的唯一鍵是如何被標(biāo)識(shí)

3.在你的文檔里,那些字段可以被用戶搜索

4.在搜索結(jié)果,那幾個(gè)字段應(yīng)該顯示給用戶

問題一就是要討論文檔粒度.

問題二,找一個(gè)唯一字段標(biāo)識(shí)每份文檔,solr用來查找這份文檔,如果帶有同一唯一鍵的文檔要添加到索引,solr會(huì)使用這份最后的文檔覆蓋已存在的記錄.

問題三,那些字段是索引字段.除了用于搜索的字段外,還有用于排序,分面(facet),分組(group by),用于提供搜索建議或執(zhí)行函數(shù)查詢的字段都應(yīng)該標(biāo)記為索引字段

問題四,那些字段是存儲(chǔ)字段.一般從搜索角度來看是沒有用的,但用于顯示搜索結(jié)果的字段,都可稱為存儲(chǔ)字段.

schema.xml就是solr用于理解如何索引你的文檔的主要配置文檔.schema.xml文檔主要有三部分.

1.<fields>元素包含<field>和<dynamicField>用于定義你的文檔的基本結(jié)構(gòu).

2.其他元素.例如<uniqueKey>和<copyField>,它們列于<fields>元素之后.

3.<types>下的字段類型決定了日期,數(shù)字,文本在solr是如何被處理的

必須字段屬性.

<field name="screen_name" type="string" indexed="true" stored="true" />

每個(gè)字段都要有一個(gè)唯一name屬性,還有一個(gè)type屬性.當(dāng)一個(gè)字段是存儲(chǔ)字段,solr存儲(chǔ)原始值而不是分析后的值.如上面,此文本字段是可搜索的,也可以在搜索結(jié)果返回原始文本.當(dāng)然,如果在搜索結(jié)果不返回這個(gè)字段,那么就必要存儲(chǔ)這個(gè)字段

多值字段

如果用一個(gè)字段保存多個(gè)值來建立索引,就可以將這個(gè)字段設(shè)置multiValued="true"

動(dòng)態(tài)字段

使用glob風(fēng)格表達(dá)式匹配字段,以下情況可以使用動(dòng)態(tài)字段:

1.使用多個(gè)字段建模文檔<dynamicField name="*_s" type="string" indexed="true" stored="true" />

2.從不同來源支持文檔

3.添加新文檔來源

復(fù)制字段

以下兩種情況使用復(fù)制字體

1.將多個(gè)字段內(nèi)容放入單個(gè)字段(multiValued="true"的來源的name都是一樣的,而此情況的name是不一樣的)

2.應(yīng)用不同的文本分析同一個(gè)字段內(nèi)容來創(chuàng)建一個(gè)新的搜索字段

結(jié)構(gòu)化非文本字段類型

1.字符串字段.<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> solr.對(duì)應(yīng)org.apache.solr.schema.包的縮寫.

2.日期字段.<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>

3.數(shù)字字段.<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>

sortMissingFirst="true"排序結(jié)果中,solr將對(duì)于此字段沒有值的文檔列在結(jié)果的頂部.

sortMissingLast="true"排序結(jié)果中,solr將對(duì)于此字段沒有值的文檔列在結(jié)果的底部.

precisionStep="數(shù)字"在索引,決定創(chuàng)建詞語的數(shù)目來代表數(shù)值做快速排序查詢在那些基于Trie的字段.如TrieDate和TrieLong

數(shù)字越小,索引占空間越大,性能越好.所以在占空間越大和性能之間衡量取一個(gè)合適值.

使用xml或json索引文檔.

對(duì)于動(dòng)態(tài)字段,schema.xml有默認(rèn)配置,使用以下使命令就OK

cd $SOLR_IN_ACTION/example-docs/

java -jar post.jar ch5/tweets.xml

使用SolrJ客戶端庫添加文檔

SolrServer solr = new HttpSolrServer(serverUrl);

SolrInputDocument doc1 = new SolrInputDocument();

doc1.setField("id", "1");

doc1.setField("screen_name_s", "@thelabdude");

solr.add(doc1);

SolrInputDocument doc2 = new SolrInputDocument();

doc2.setField("id", "2");

doc2.setField("screen_name_s", "@thelabdude");

solr.add(doc2);

solr.commit(true, true);

其它工具導(dǎo)入文檔到solr

Data Import Handler (DIH)(外部源為網(wǎng)站或關(guān)系型數(shù)據(jù)庫)

ExtractingRequestHandler, aka Solr Cell(從二進(jìn)制文件如PDf,MS Office,OpenOffice文檔抽取文本建索引)

Nutch(可以使用out of the box(開箱即用)的爬蟲)

更新handler

請求類型 描述
xml例子

Add 添加一個(gè)或多個(gè)文檔到索引<add><doc><field name="id">1</field>...</doc></add>

Delete 根據(jù)ID刪除文檔<delete><id>1</id></delete>

Delete by query 根據(jù)lucence查詢刪除文檔<delete><query>screen_name:@thelabdude</query></delete>

Atomic update 使用樂觀鎖更新已存在文檔的一個(gè)或多個(gè)字段<add><doc><field name="id">1</field><field update="set"name="favorites_count">12</field></doc></add>

Commit 提交文檔到索引<commit waitSearcher="true" softCommit="false" />

Optimize 通過混合多個(gè)段和移除已刪除優(yōu)化索引<optimize waitSearcher="false"/>

正常提交也叫硬提交.solr刷新所以未提交文檔到硬盤并且刷新內(nèi)部叫搜索器的組件,以便最近提交的文檔可被搜索.提交成功后,最近提交的文檔安全地被持久化到長期存儲(chǔ).

軟件提交.支持近實(shí)時(shí)搜索.你可以認(rèn)為軟提交作為一種機(jī)制使文檔能近實(shí)時(shí)搜索,通過跳過硬提交耗資源多的方面,如刷新到長期存儲(chǔ). 你仍然需要在某個(gè)時(shí)間點(diǎn)做一個(gè)硬提交來確保未提交的文檔最終被刷新到長期存儲(chǔ).

兩者的區(qū)別就是有沒有刷新到長期存儲(chǔ).

AUTOCOMMIT(自動(dòng)硬提交)

1.在一個(gè)指定的時(shí)間內(nèi)提交每一份文檔.

2.一旦到達(dá)用戶指定未提交文檔的閾值,提交所有文檔.

3.在一個(gè)常規(guī)時(shí)間間隔,提交所有文檔.如每十分鐘.

<autoCommit>

<maxTime>600000</maxTime>

<maxDocs>50000</maxDocs>

<openSearcher>true</openSearcher>

</autoCommit>

autoSoftCommit(自動(dòng)軟提交)

<autoSoftCommit>

<maxTime>1000</maxTime>

</autoSoftCommit>

事務(wù)日志的三個(gè)關(guān)鍵目的:

1.用于支持實(shí)時(shí)取和原子性更新.

2.從提交過程分離連續(xù)寫

3.在SolrCloud支持同步復(fù)制到shard leaders

update="值" 值可為set,inc,add

set在我看來理解為覆蓋,inc用于數(shù)值在原基礎(chǔ)上遞增,add用于添加多值(Multivalued)

使用_version_實(shí)現(xiàn)樂觀鎖控制之前必須要知道_version_值, 此值可通過get請求http://localhost:8983/solr/collection1/get?id=1&fl=id,_version_獲取

(如果了解過JPA帶有@Version字段的實(shí)體,使用樂觀鎖解決并發(fā)問題.上面的這種機(jī)制是一樣的)

索引管理

索引存儲(chǔ).提交文檔到索引時(shí),是使用一個(gè)叫directory的組件寫到長期存儲(chǔ).這個(gè)組件的四個(gè)好處:

1.從長期存儲(chǔ)讀和寫到長期存儲(chǔ),隱藏細(xì)節(jié).

2.實(shí)現(xiàn)一個(gè)特定存儲(chǔ)鎖機(jī)制來阻止索引中斷

3.隔離Solr來自于從JVM和操作系統(tǒng)的特點(diǎn)。

4.啟用擴(kuò)展一個(gè)基于directory實(shí)現(xiàn)的行為來支持特定使用情況,如近實(shí)時(shí)搜索

默認(rèn)存儲(chǔ)配置solr.NRTCachingDirectoryFactory

它是StandardDirectoryFactory的封裝,可以根據(jù)操作系統(tǒng)和jvm的具體情況,替換為MMapDirectory,SimpleFSDirectory,NIOFSDirectory三者之一.

段混合.這是一個(gè)很耗CPU,硬盤IO的操作.所以solr社區(qū)當(dāng)前建議微調(diào)solr段混合策略,而不是混合成一個(gè)大文件.有需要再去看看專家級(jí)混合設(shè)置

處理已刪除的文檔.刪除不會(huì)從已存在段刪除文檔.刪除的文檔并沒有從索引中移除,而是直到包含刪除文檔的段被合并那時(shí)才是真的刪除.                                   

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多