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的值
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進行不同維度查詢
查範圍、分類、各個分類下的總數
收尾
清理數據集