solr搜尋引擎 copyField欄位 檢索查詢
阿新 • • 發佈:2019-01-28
新增一個文件
查詢新增的文件
以上詳細介紹了query裡面的引數詳解。
當不輸入任何條件時,進行查詢,看看返回結果。
返回了剛才新增進去的文件。
新增文件時,我們添加了id,title,content 分詞,那麼如果我們想自己定義,該如何?
{"id":"change.me","aaaaaa":"change.me"}
結果返回錯誤:
Status: error Error: Bad Request Error: { "responseHeader": { "status": 400, "QTime": 1 }, "error": {"msg": "ERROR: [doc=change.me] unknown field 'aaaaaa'", "code": 400 } }
不能發現 aaaaaa 這個filed!!
回到頂部熟悉兩個重要的文件
1.Schema.xml
schema.xml位於solr/conf/目錄下,類似於資料表配置檔案,定義了加入索引的資料的資料型別,主要包括type、fields和其他的一些預設設定。
Field:域的定義
- Name:域的名稱
- Type:域的型別
- Indexed:是否索引
- Stored:是否儲存
-
multiValued:是否多值,如果是多值在一個域中可以保持多個值。
- dynamicField動態域
dynamicField:動態域
- Name:域的名稱,是一個表示式。如果域的名稱和表示式相匹配,此域名就可以使用。
- Type:域的型別
- Indexed:是否索引
- Stored:是否儲存
- multiValued:是否多值,如果是多值在一個域中可以保持多個值。
uniqueKey
- 每個文件必須有一個uniqueKey,而且不能重複。相當於表中的主鍵。
copyField
- 複製域。
- Source:源域
- Dest:目標域。
- 建立文件時,solr會自動把源域的內容複製到目標域。使用複製域可以提供查詢的效能。
fieldType
- 域的型別。
-
Name:域型別名。
- Class:對應的實現類。solr.TextField類似於Lucene中的TextField。可以配置使用者自定義的分析器。
儲存的都是一些solr內建的欄位。
可以自己定義一些欄位和型別
solr/collection1/conf
找到Schema.xml檔案,進行新增
<!-- Anny 配置欄位--> <field name="title_ik" type="text_ik" indexed="true" stored="true"/> <field name="content_ik" type="text_ik" indexed="true" stored="true" multiValued="true"/> <!-- IKAnalyzer- 配置型別-> 採用中文分詞器 <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> <!--IKAnalyzer Field-->
配置步驟:
- 第一步:把IKAnalyzer2012FF_u1.jar新增到solr工程的lib庫中。
- 第二步:把配置檔案和擴充套件詞典、停用詞詞典新增到solr工程classpath下。Solr/WEB-INF/classes。保證字典的字符集是utf-8.注:classes沒有這個資料夾手動建立就好!
IKAnalyzer.cfg.xml配置檔案
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 擴充套件配置</comment> <!--使用者可以在這裡配置自己的擴充套件字典 --> <entry key="ext_dict">ext.dic</entry> <!--使用者可以在這裡配置自己的擴充套件停止詞字典--> <entry key="ext_stopwords">stopword.dic;</entry> </properties>
ext.dic配置檔案
惠民
中商惠民www
baby
屌絲男士
野菊花
向日葵
菊花
葵花
注:如果文件第一行的詞,沒有進行分詞處理,那麼就驗證了第一行不進行分詞。可以空一行!
配置完畢後,進行重啟tomcat即可訪問。
copy域的應用
將資料庫的欄位建立型別和域
<!--product--> <field name="product_name" type="text_ik" indexed="true" stored="true"/> <field name="product_price" type="float" indexed="true" stored="true"/> <field name="product_description" type="text_ik" indexed="true" stored="false" /> <field name="product_picture" type="string" indexed="false" stored="true" /> <field name="product_catalog_name" type="string" indexed="true" stored="true" /> <field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="product_name" dest="product_keywords"/> <copyField source="product_description" dest="product_keywords"/>
copyField域
<copyField source="product_name" dest="product_keywords"/> 建立索引product_name,複製到product_keywords裡面了。
把多個域的關鍵詞複製到同一個域,多個域時,可以放到一個域中。就不用定義那麼多域了。搜尋比較方便。