Solr入門(二)之Schema API和Facet

Solr入門(二)

重啓Solr

solr start -c -p 8983 -s ../example/cloud/node1/solr

solr start -c -p 7574 -s ../example/cloud/node2/solr -z localhost:9983

創建新數據集

即將演示的特性:field guessing。

這種field guessing特性的模式被稱爲:Schemaless。

什麼是schema?

我想到了這三個詞:模式,範式,配置

solr 的 schema 用來定義屬性和屬性類型,幫助solr去索引數據

創建數據集

使用configSet 創建數據集,例子中使用默認的configset創建,這種不建議在生產環境,不過我們這裏主要是測試。

-s 2 -rf 2表示把數據集分成兩個分片,每個分片有兩個副本。

 

準備爲Films數據集使用Schemaless特性

Schemaless這個特性,就是你不需要指定一個schema來讓solr建立索引,讓solr猜你要爲哪些關鍵詞數據建索引等信息。

當然這裏猜也是基於默認schema,默認分詞算法的。

之所以不建議在生產環境直接使用這個特性,就是不能保證猜的每次都是對的。當你的大量數據在線上被使用,然而用戶搜索的時候,solr猜關鍵詞猜錯了,就會很麻煩,需要重新建立索引。

總之,不要過分相信工具提供的特性,solr提供schema是有原因的,需求總是複雜和無盡的。

數據類型修正

官網舉了個例子來說明Schemaless這個事:

比如如果爲電影名建索引時,遇到的第一個電影的名字叫.45,那麼solr可能認爲電影名(names)字段的類型是float,很明顯這是錯的。需要修正爲string。

使用Schema API:

curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

使用AdminUI

設置schema索引所有字段

Schema API:

curl -X POST -H 'Content-type:application/json' --data-binary '{"add-copy-field" : {"source":"*","dest":"_text_"}}' http://localhost:8983/solr/films/schema

AdminUI:

上述做的事情是:將所有字段屬性複製到_text_中。

這個拷貝如果是全量,在生產環境數據量大的時候會很慢。

建立Film的數據索引

 

去AdminUI,搜索可以看到1100條結果:

 

Faceting

facet這個單詞谷歌翻譯了下,翻譯作"面"。有方面或者切面的意思。具體什麼意思呢?查一下就清楚了:

如上的查詢條件後,可以看到返回的是一個聚合後的結果,統計每種類型的電影的數量。

使用mincount參數可以限制查詢數量大於200的值

http://localhost:8983/solr/films/select?=&q=*:*&facet.field=genre_str&facet.mincount=200&facet=on&rows=0

關於Faceting使用的更多信息在這裏可以查詢到。

Range Facets

範圍查詢,比如查詢時間範圍

Pivot Facets

按電影類別分類,再統計類別基礎上各導演的電影數。

http://localhost:8983/solr/films/select?q=*:*&rows=0&facet=on&facet.pivot=genre_str,directed_by_str

看一下結果就更明白了

總結:

1、介紹了Schema API的使用

2、使用facet進行不同維度查詢

查範圍、分類、各個分類下的總數

 

收尾

清理數據集

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章