(三)Lucene Field域和索引的增刪改

2021-09-07 15:08:09 字數 3042 閱讀 5697

1. field域

1.1  field的屬性

是:對該field儲存的內容進行分詞,分詞的目的,就是為了索引。

比如:商品名稱、商品描述、商品**

否:不需要對field儲存的內容進行分詞,不分詞,不代表不索引,而是將整個內容進行索引。

比如:商品id

是:將分好的詞進行索引,索引的目的,就是為了搜尋。

比如:商品名稱、商品描述、商品**、商品id

否:不索引,也就是不對該field域進行搜尋。

是:將field域中的內容儲存到文件域中。儲存的目的,就是為了搜尋頁面顯示取值用的。

比如:商品名稱、商品**、商品id、商品位址

否:不將field域中的內容儲存到文件域中。不儲存,則搜尋頁面中沒法獲取該field域的值。

比如:商品描述,由於商品描述在搜尋頁面中不需要顯示,再加上商品描述的內容比較多,所以就不需要進行儲存。如果需要商品描述,則根據搜尋出的商品id去資料庫中查詢,然後顯示出商品描述資訊即可。

1.2  field的常用型別

下邊列出了開發中常用

的filed型別,注意

field

的屬性,根據需求選擇:

field類

資料型別

analyzed

是否分詞

indexed

是否索引

stored

是否儲存

說明stringfield(fieldname, fieldvalue,store.yes))

字串nyy或n

這個field

用來構建乙個字串field

,但是不會進行分詞,會將整個串儲存在索引中,比如(訂單號,身份證號等

) 是否儲存在文件中用store.yes或store.no決定

longfield(fieldname, fieldvalue,store.yes)

long型 y

yy或n

這個field

用來構建乙個long

數字型field

,進行分詞和索引,比如(**)

是否儲存在文件中用store.yes或store.no決定

storedfield(fieldname, fieldvalue) 

過載方法,支援多種型別nn

y這個field

用來構建不同型別field

不分析,不索引,但要field

儲存在文件中

textfield(fieldname, fieldvalue, store.no)

或textfield(fieldname, reader)

字串或流y

yy或n

如果是乙個reader, lucene

猜測內容比較多

,會採用

unstored

的策略.

1.3 修改入門程式的**

for

(book book : list)

2. 索引維護2.1 需求圖書資訊在資料庫

發生變化,所以索引庫相對應的也要發生增刪改變化。

2.2 增加索引

語法(具體參照建立索引的程式):indexwriter.adddocument(document);

······

//a)建立分詞器,標準分詞器(分析文件,對文件中的field域進行分詞)

analyzer analyzer = new

standardanalyzer();

//b)建立indexwriterconfig物件

indexwriterconfig cfg = new

indexwriterconfig(version.lucene_4_10_3, analyzer);

//c)建立索引庫目錄,指定索引庫的位址

file indexfile = new file("d:\\dbindex\\");

directory directory =fsdirectory.open(indexfile);

//d)建立indexwriter物件

indexwriter writer = new

indexwriter(directory, cfg);

//e)通過indexwriter物件將document寫入到索引庫中

for(document doc : doclist)

//f)關閉writer

writer.close();

······

2.2 刪除索引增刪改操作

,都是需要通過indexwriter物件來操作。

2.2.1根據條件刪除

term是索引域中最小的單位。根據條件刪除時,建議根據唯一鍵來進行刪除。在

solr

中就是根據

id來進行刪除和修改操作的。

@test

public

void deleteindex() throws

exception

2.3.2 刪除全部

@test

public

void deleteindex() throws

exception

2.4 修改索引

@test

public

void updateindex() throws

exception

mysql的表索和行索 mysql行鎖和表鎖

在呼叫儲存過程中,就會涉及到表鎖,行鎖這一概念 所謂區別 有索引的時候就是行鎖,沒有索引的時候就是表索。innodb 的行鎖是在有索引的情況下,沒有索引的表是鎖定全表的.表鎖演示 無索引 session1 mysql set autocommit 0 mysql select from innodb...

Oracle的b tree和bitmap索引

number型別建立乙個bitmap索引 select from test where flag 1 執行結果 table access full 12573 分析 出現全表掃瞄而沒有執行位圖索引,可能是flag為1的資料量和表的資料量相當,所以優化器將其優化掉了.varchar2型別欄位上建立乙個...

mysql三表關聯加索引 mysql 三表索引優化

建表語句 create table if not exists phone phoneid int 10 unsigned not null auto increment,card int 10 unsigned not null,primary key phoneid engine innodb ...