1. 程式人生 > >Solr基礎教程之Query(四)

Solr基礎教程之Query(四)

前面介紹了各種配置,以及查詢語法,這裡通過圖形介面,簡單的講解一下solr的查詢。

僅通過截圖來介紹一些最基本的用法:

首先開啟主介面,點選Query
這裡寫圖片描述

直接點選Excute Query按鈕
這裡寫圖片描述

輸入條件q進行查詢
這裡寫圖片描述

使用fq進行查詢,注意這裡的keyword是用來檢索的欄位,他包含name、address、gender、expert_skill,這幾個屬性,所以我搜索“海”能夠查詢出來有海字的記錄
這裡寫圖片描述

使用sort排序
這裡寫圖片描述

使用start和rows,一般是分頁的時候使用的
這裡寫圖片描述

使用fl決定查詢哪些欄位
這裡寫圖片描述

df – 預設的查詢欄位,一般預設指定
這裡寫圖片描述

ok,最簡單的query應用,就先說這些

下面我先給大家貼一下我的solr的基本配置。

schema.xml

<schema name="example core zero" version="1.1">

   <fieldtype name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
   <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
   <fieldType
name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<!-- 定義一個分詞器 --> <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter
class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> --> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <!-- general --> <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> <field name="type" type="string" indexed="true" stored="true" multiValued="false" /> <field name="name" type="string" indexed="true" stored="true" multiValued="false" /> <field name="core0" type="string" indexed="true" stored="true" multiValued="false" /> <field name="_version_" type="long" indexed="true" stored="true"/> <field name="age" type="int" indexed="true" stored="true" multiValued="false"/> <field name="email" type="string" indexed="true" stored="true" multiValued="false"/> <field name="phone" type="string" indexed="true" stored="true" multiValued="false"/> <field name="gender" type="string" indexed="true" stored="true" multiValued="false"/> <field name="address" type="string" indexed="true" stored="true" multiValued="false"/> <field name="expert_skill" type="string" indexed="true" stored="true" multiValued="false"/> <field name="self_description" type="string" indexed="true" stored="true" multiValued="false"/> <!-- 用於做搜尋的欄位 --> <field name="keyword" type="text_general" indexed="true" stored="false" multiValued="true"/> <!-- 可供搜尋的屬性 --> <copyField source="name" dest="keyword"/> <copyField source="gender" dest="keyword"/> <copyField source="expert_skill" dest="keyword"/> <copyField source="address" dest="keyword"/> <!-- field to use to determine and enforce document uniqueness. --> <uniqueKey>id</uniqueKey> <!-- field for the QueryParser to use when an explicit fieldname is absent --> <defaultSearchField>name</defaultSearchField> <!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> <solrQueryParser defaultOperator="OR"/> </schema>

注意:schema.xml中所配置的stopwords.txt和synonyms.txt可以去solr-4.10.4\example\solr\collection1\conf目錄下找然後拷貝到自己的solr裡,本文是拷貝到mycore\conf下。

solrconfig.xml

只在原有的基礎上追加了以下程式碼

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
    <str name="config">data-config.xml</str>
    </lst>
</requestHandler>

data-config.xml

這是個自己建立的檔案,與schema.xml、solrconfig.xml在同一個目錄

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/simplehr" user="root" password="123456" batchSize="-1" />
<document name="resumeDoc">
        <entity name="resume" pk="id"
                query="select id,name,age,email,phone,gender,address,expert_skill,self_description from resume where id >= ${dataimporter.request.id}">
  </entity>
</document>
</dataConfig>