国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

solr與.net系列課程(四)solr查詢參數的講解與.net如何獲取solr數據

2019-11-17 01:46:57
字體:
來源:轉載
供稿:網友

solr與.net系列課程(四)solr查詢參數的講解與.net如何獲取solr數據

solr與.net系列課程(四)solr查詢參數的講解與.net如何獲取solr數據

上一節我們完成了solr連接數據庫,細心的朋友會發現一個問題,就是solr其實和語言沒有任何關系,配置完成后任何語言都可以直接調用,本章我們主要對solr的查詢做出講解,然后就是新接觸的人最關心的.net如何獲取solr中的數據.

本節我準備了一個300萬左右的數據表,為大家做演示

然后我們開始配置schema.xml 文件:

    <field name="id" type="string" indexed="true" stored="true" required="true" />      <field name="title" type="text_cn" indexed="true" stored="true" multiValued="false" />     <field name="area" type="string" indexed="true" stored="true" />    <field name="industry" type="string" indexed="true" stored="true" />    <field name="industrys" type="string" indexed="true" stored="true" />    <field name="body" type="smartChnText" indexed="true" stored="true"/>    <field name="adddate" type="date" indexed="true" stored="true" multiValued="false"/>    <field name="columns" type="smartChnText" indexed="true" stored="true"/>    <field name="sorts" type="string" indexed="true" stored="true"/>    <field name="url" type="string" indexed="true" stored="true" required="true" />    <field name="orderColumn" type="string" indexed="true" stored="true"/>    <field name="phase" type="string" indexed="true" stored="true"/>    <field name="phasetype" type="string" indexed="true" stored="true"/>    <field name="pfund" type="tfloat" indexed="true" stored="true"/>    <field name="flag" type="string" indexed="true" stored="true" />

這里說明一下,數據表中的數據可以選擇行的存入solr中,想存哪個就配置哪個就行了

type="text_cn" 就是我配置的ik分詞器,type="smartChnText"是solr自帶的分詞器,分詞效果一般,但也要配置,直接在配置ik分詞器的位置粘貼如下代碼即可:

<!-- 加入smartcn 中文分詞器 text_newcn--> <fieldType name="smartChnText" class="solr.TextField"  >      <analyzer  class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>   </fieldType> 

這里強調一下,分詞器有很多種,想要哪種就用哪種

配置完成后開始配置data-confing.xml文件

<?xml version="1.0" encoding="UTF-8"?>  <dataConfig><dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://192.168.0.8;DatabaseName=BHI_DATABASE" user="sa" passWord="123"/><document name="Info"><entity name="Biddings" pk="OriginalID" transformer="ClobTransformer" query="SELECT OriginalID,'項目標訊' as orderColumn, '項目標訊' as columns ,'${dataimporter.last_index_time}' as ColumnID,dbo.ShowLabelName(Area) as Area,Pfund,ColumnID as flag,category,dbo.ShowLabelName(Industry) as Industry, Industry as Industrys,Title,( dbo.fun_joinInfo(OriginalID) + CONVERT(VARCHAR(MAX),description) ) AS description,AddDate FROM BHI_DATABASE.dbo.Info_Bidding"deltaImportQuery="SELECT  OriginalID,'項目標訊' as orderColumn, '項目標訊' as columns ,'${dataimporter.last_index_time}' as ColumnID,dbo.ShowLabelName(Area) as Area,Pfund,ColumnID as flag,category,dbo.ShowLabelName(Industry) as Industry,Industry as Industrys,Title,( dbo.fun_joinInfo(OriginalID) + CONVERT(VARCHAR(MAX),description) ) AS description,AddDate FROM BHI_DATABASE.dbo.Info_Bidding  where adddate > '${dataimporter.last_index_time}'"deltaQuery="SELECT OriginalID FROM BHI_DATABASE.dbo.Info_Bidding where  adddate > '${dataimporter.last_index_time}'">           <field column="OriginalID"            name="id"            />           <field column="title"        name="title"        />           <field column="area"        name="area"          />             <field column="industry"    name="industry"    />                <field column="industrys"    name="industrys"    />           <field column="description"        name="body"        />           <field column="adddate"        name="adddate"        />           <field column="ColumnID"    name="sorts"    />           <field column="columns"    name="columns" />            <field column="OriginalID"    name="url"    />           <field column="orderColumn"    name="orderColumn" />             <field column="Pfund"    name="pfund" />              <field column="category"    name="phase" />               <field column="flag"    name="flag" />           </entity></document>

這里我沒有用簡單的select id,name ...from 表名這種簡單的sql語句,而是寫了一個帶有別名,函數的sql語句,就是告訴大家,這里可以寫任何sql語句,但視圖,表連接最好不要使用,要使用表連接的話我上節課已經講解了,想用的朋友可以回去看看.

Solr 是如何查詢的呢?這里先列出solr查詢所需要的參數

常用

q - 查詢字符串,必須的。 fl - 指定返回那些字段內容,用逗號或空格分隔多個。 start - 返回第一條記錄在完整找到結果中的偏移位置,0開始,一般分頁用。 rows - 指定返回結果最多有多少條記錄,配合start來實現分頁。 sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, PRice asc)表示先 “inStock” 降序, 再 “price” 升序,默認是相關性降序。 wt - (writer type)指定輸出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我們,因為默認沒有打開。 fq - (filter query)過慮查詢,作用:在q查詢符合結果中同時是fq查詢符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找關鍵字mm,并且date_time是20081001到20091031之間的。官方文檔:http://wiki.apache.org/solr/CommonQueryParameters#head-6522ef80f22d0e50d2f12ec487758577506d6002不常用

q.op - 覆蓋schema.xml的defaultOperator(有空格時用"AND"還是用"OR"操作邏輯),一般默認指定 df - 默認的查詢字段,一般默認指定 qt - (query type)指定那個類型來處理查詢請求,一般不用指定,默認是standard。 其它

indent - 返回的結果是否縮進,默認關閉,用 indent=true|on 開啟,一般調試json,php,phps,ruby輸出才有必要用這個參數。 version - 查詢語法的版本,建議不使用它,由服務器指定默認值。

那么我們來實際查詢一個試試

Selet * from table where area=’重慶’ and columns=’項目標訊’ --這個轉換成solr語句怎么寫?

http://127.0.0.1:8080/solr/collection1/select?q=area:重慶&fq=columns:項目標訊&wt=xml&indent=true

http://127.0.0.1:8080/solr/collection1/select?q=*:*&fq=area:重慶&fq=columns:項目標訊&wt=xml&indent=true

q是主查詢 fq是輔查下(可以多個)

我們來看看效果,直接在瀏覽器中輸入上面的地址:

像不像我們使用的Ajax請求,請求鏈接獲取數據

我想查詢部分字段怎么辦呢,使用fl參數

http://127.0.0.1:8080/solr/collection1/select?fl=title,orderColumn,area,columns,id&q=*:*&fq=area:重慶&fq=columns:項目標訊&wt=json&indent=true

看看效果,這個返回json數據:

現在我們練習一個

Select top 2 title,orderColumn,area,columns,id from table where area=山東 OR area= 福建 and columns=項目標訊 order by adddate desc

轉換為solr語句:http://127.0.0.1:8080/solr/collection1/select?fl=title,orderColumn,area,columns,id&q=*:*&fq=area:福建+OR+area:山東&fq=columns:項目標訊 &wt=json&indent=true&&start=0&rows=2&sort=adddate desc

上面列出的查詢條件都可以自由組合( OR 和 AND 要大寫,小寫有時不出數據)

好了下面在就該說一下大家最關心的問題了,.net如何獲取這些數據(這里先使用最原始的方式)

首先創建個程序,隨便創建個aspx頁面,在后臺輸入如下代碼

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Net;using System.IO;using System.Text;namespace solr實例{    public partial class _Default : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            string solr_url = @"http://127.0.0.1:8080/solr/collection1/select?fl=title,orderColumn,area,columns,id&q=*:*&fq=area:山東 OR area:福建 &fq=columns:項目標訊&wt=xml&indent=true&&start=0&rows=10&sort=adddate desc";            WebRequest wr = WebRequest.Create(solr_url);            Stream s = wr.GetResponse().GetResponseStream();            StreamReader sr = new StreamReader(s, Encoding.UTF8);            string result = sr.ReadToEnd();        }    }}

執行以下看看 result中有沒有數據?

這樣我們就得到數據了,但是這是一個字符串啊,怎么使用呢,我我這里使用數據契約將上述內容轉化為數據實體,數據契約不了解的話去網上查一查,很好理解的.

首先創建契約類

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;namespace ClassLibrary1{    [DataContract]    public class Solr_Projects    {        [DataMember(Name = "responseHeader")]        public Solr_Projects_ResponseHeader Res
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桂阳县| 沧源| 博客| 福鼎市| 平昌县| 柞水县| 高唐县| 巨野县| 常州市| 淮阳县| 道孚县| 临颍县| 长泰县| 集贤县| 阜新市| 巨野县| 罗江县| 金坛市| 清远市| 法库县| 通江县| 牟定县| 东丰县| 龙口市| 盱眙县| 九寨沟县| 镇江市| 垣曲县| 额尔古纳市| 巍山| 工布江达县| 友谊县| 积石山| 冷水江市| 化州市| 尖扎县| 阿拉尔市| 延津县| 兴业县| 曲水县| 东方市|