1. 程式人生 > >Solr之精確、匹配、排序、模糊查詢-yellowcong

Solr之精確、匹配、排序、模糊查詢-yellowcong

Solr查詢資料,其實下面一堆的引數,我也沒有做測試,只是轉載過來了,我大概只用了高亮、排序、查詢、分頁,其他的好像沒有用過,以後用再來查

一.基本查詢

引數意義
q 查詢的關鍵字,此引數最為重要,例如,q=id:1,預設為q=:
fl 指定返回哪些欄位,用逗號或空格分隔,注意:欄位區分大小寫,例如,fl= id,title,sort
start 返回結果的第幾條記錄開始,一般分頁用,預設0開始
rows 指定返回結果最多有多少條記錄,預設值為 10,配合start實現分頁
sort 排序方式,例如id desc 表示按照 “id” 降序
wt (writer type)指定輸出格式,有 xml, json, php等
fq (filter query)過慮查詢,提供一個可選的篩選器查詢。返回在q查詢符合結果中同時符合的fq條件的查詢結果,例如:q=id:1&fq=sort:[1 TO 5],找關鍵字id為1 的,並且sort是1到5之間的。
df 預設的查詢欄位,一般預設指定。
qt (query type)指定那個型別來處理查詢請求,一般不用指定,預設是standard。
indent 返回的結果是否縮排,預設關閉,用 indent=true
version 查詢語法的版本,建議不使用它,由伺服器指定預設值。

 二. Solr的檢索運算子

符號意義
“:” 指定欄位查指定值,如返回所有值:
“?” 表示單個任意字元的通配
“*” 表示多個任意字元的通配(不能在檢索的項開始使用*或者?符號)
“~” 表示模糊檢索,如檢索拼寫類似於”roam”的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。
AND || 布林操作符
OR、&& 布林操作符
NOT、!、- (排除操作符不能單獨與項使用構成查詢)
“+” 存在操作符,要求符號”+”後的項必須在文件相應的域中存在²
( ) 用於構成子查詢
[] 包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[201507 TO 201510]
{} 不包含範圍檢索,如檢索某時間段記錄,不包含頭尾date:{201507 TO 201510}

三. 高亮

符號意義
h1
    是否高亮,hl=true,表示採用高亮
hl.fl
    設定高亮顯示的欄位,用空格或逗號隔開的欄位列表。要啟用某個欄位的highlight功能,就得保證該欄位在schema中是stored。如果該引數未被給出,那麼就會高亮預設欄位 standard handler會用df引數,dismax欄位用qf引數。你可以使用星號去方便的高亮所有欄位。如果你使用了萬用字元,那麼要考慮啟用hl.requiredFieldMatch選項。
hl.requireFieldMatch
    如果置為true,除非用hl.fl指定了該欄位,查詢結果才會被高亮。它的預設值是false。
hl.usePhraseHighlighter
    如果一個查詢中含有短語(引號框起來的)那麼會保證一定要完全匹配短語的才會被高亮。
hl.highlightMultiTerm
    如果使用萬用字元和模糊搜尋,那麼會確保與萬用字元匹配的term會高亮。預設為false,同時hl.usePhraseHighlighter要為true。
hl.fragsize -返回的最大字元數。預設是100.如果為0,那麼該欄位不會被fragmented且整個欄位的值會被返回。

 四. 分組

  這是facet的官方wiki,裡面有facet各個引數的詳細說明。所以這裡只說一些常用的。

  Facet是Solr的核心搜尋功能,主要是導航(Guided Navigation)、引數化查詢(Paramatic Search)。Facet的主要好處是在搜尋的同時,可以按照Facet條件進行分組統計,給出導航資訊,改善搜尋體驗。

  Facet主要分為:Field Facet 和 Date Facet 兩大類

1. Field Facet

    facet 引數欄位必須被索引

    facet=on 或 facet=true

    facet.field 分組的欄位

    facet.prefix 表示Facet欄位字首

    facet.limit Facet欄位返回條數

    facet.offict 開始條數,偏移量,它與facet.limit配合使用可以達到分頁的效果

    facet.mincount Facet欄位最小count,預設為0

    facet.missing 如果為on或true,那麼將統計那些Facet欄位值為null的記錄

    facet.sort 表示 Facet 欄位值以哪種順序返回 .格式為 true(count)|false(index,lex),true(count) 表示按照 count 值從大到小排列,false(index,lex) 表示按照欄位值的自然順序 (字母 , 數字的順序 ) 排列 . 預設情況下為 true(count)

2. Date Facet

    對日期型別的欄位進行 Facet. Solr 為日期欄位提供了更為方便的查詢統計方式 .注意 , Date Facet的欄位型別必須是 DateField( 或其子型別 ). 需要注意的是 , 使用 Date Facet 時 , 欄位名 , 起始時間 , 結束時間 , 時間間隔這 4 個引數都必須提供 .

符號意義
facet.date 該引數表示需要進行 Date Facet 的欄位名 , 與 facet.field 一樣 , 該引數可以被設定多次 , 表示對多個欄位進行 Date Facet.
facet.date.start 起始時間 , 時間的一般格式為 ” 2015-12-31T23:59:59Z”, 另外可以使用 ”NOW”,”YEAR”,”MONTH” 等等 ,
facet.date.end 結束時間
facet.date.gap 時間間隔,如果 start 為 2015-1-1,end 為 2016-1-1,gap 設定為 ”+1MONTH” 表示間隔1 個月 , 那麼將會把這段時間劃分為 12 個間隔段 .
facet.date.hardend 表示 gap 迭代到 end 時,還剩餘的一部分時間段,是否繼續去下一個間隔. 取值可以為 true

例 start 為 2015-1-1,end 為 2015-12-21,gap 為 ”+1MONTH”, 如果hardend 為 false,則,最後一個時間段為 2015-12-1 至 2016-1-1; 反之,如果 hardend 為 true,則,最後一個時間段為 2015-12-1 至 2015-12-21.

  注意:Facet的欄位必須被索引,無需分詞,無需儲存。無需分詞是因為該欄位的值代表了一個整體概念,無需儲存是因為一般而言使用者所關心的並不是該欄位的具體值,而是作為對查詢結果進行分組的一種手段,給出相關的分組資訊,從而改善搜尋體驗。

相關推薦

Solr精確匹配排序模糊查詢-yellowcong

Solr查詢資料,其實下面一堆的引數,我也沒有做測試,只是轉載過來了,我大概只用了高亮、排序、查詢、分頁,其他的好像沒有用過,以後用再來查 一.基本查詢 引數意義 q 查詢的關鍵字,此引數最為重要,例如,q=id:1,預設為q=:, fl 指定返回哪些欄位,用逗

常用內部排序演算法四:簡單選擇排序直接插入排序和氣泡排序

前言 之所以把這三類演算法放在一塊,是因為除此之外的演算法都是在這三類演算法的基礎上進行優化的。簡單選擇排序的思想是每一趟n−i+1(i=1,2,...,n−1)個記錄中選擇最小的記錄作為有序序列的第i個記錄。直接插入排序的思想是將一個記錄插入到已經排好序的有

資料結構直接插入排序折半插入排序希爾排序演算法

哪個成功的人不是一路坎坷過來的,只有這樣你才知道珍惜,知道成功的不易。有時候太容易得到的東西反而不知道珍惜。 直接插入排序: 我們的記錄本身就是基本有序的,我們只需要少量的插入操作,就可以完成整個記錄集的排序工作,此時直接插入很高效。還有就是記錄數比較少時,直接插入的優勢

淺談C++冒泡排序希爾排序快速排序插入排序排序基數排序性能對比分析(好戲在後面,有圖有真相)

棧溢出 分享圖片 隨機數 函數 大根堆 oschina 共同學習 時間復雜度 還原 由於沒考慮到一些情況,對以上一些算法做了改進和對比!以及昨晚把希爾排序寫錯而誤以為其效率高過快速排序的糗事,今天一一做了更正和說明,如果你絕得本隨筆不是很妥可以嘗試看看這http://www

JavaScript 資料結構與演算法美 - 歸併排序快速排序希爾排序排序

1. 前言 演算法為王。 想學好前端,先練好內功,只有內功深厚者,前端之路才會走得更遠。 筆者寫的 JavaScript 資料結構與演算法之美 系列用的語言是 JavaScript ,旨在入門資料結構與演算法和方便以後複習。 之所以把歸併排序、快速排序、希爾排序、堆排序放在一起比較,是因為它們的平均時

插入排序合並排序排序和快速排序

dom public and chang 大堆 第一個 復雜 快速排序 oid 1 * 插入排序 2 * 時間復雜度O(n2) 3 * @param array原地排序算法 4 */ 5 public void insertSort(int[] arr

排序演算法(直接插入氣泡排序選擇排序快速排序希爾排序排序歸併排序

main函式 int main() { int data[] = {1,2,6,3,4,7,7,9,8,5}; //bubble_sort(data,10); //select_sort(data,10); Insert_Sort(data,10); fo

今日分資料結構作業:氣泡排序堆排希爾排序快排……

先看實驗報告:  好吧,這次實驗報告沒有什麼好吐槽的,安安分分的寫了好久。 bug無數,雖然之前寫過,但是沒這麼詳細。 程式碼+註釋: import java.io.*; import java.util.Arrays; public class Main3 {

演算法初級02——荷蘭國旗問題隨機快速排序排序排序相鄰兩數的最大差值問題工程中的綜合排序演算法

主要討論:荷蘭國旗問題、隨機快速排序、堆排序、穩定性、比較器、桶排序、相鄰兩數的最大差值問題和簡單介紹工程中的綜合排序演算法   題目一 給定一個數組arr,和一個數num,請把小於等於num的數放在陣列的左邊,大於num的數放在陣列的右邊。 要求額外空間複雜度O(1),時間複雜度O(N)

排序下篇(快速排序並歸排序排序排序/基數排序

5.快速排序 (1)原理: 在要排序的一組數中,通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。 (2)圖解:這第一次迴圈5 小黑框是已確定位置,大黑框中使用遞迴 (3)程

Python排序演算法(二) 快速排序希爾排序歸併排序

這篇文章有的排序演算法是:快速排序、希爾排序、歸併排序。 快速排序 ''' 快速排序 ''' def quick_sort(aList, first, last): if first >= last: return min_va

排序的模板【氣泡排序選擇排序直接插入排序歸併排序排序】(還有排序後面繼續補)

目錄 氣泡排序: 選擇排序: 歸併排序: 堆排序: 氣泡排序: 第一種寫法: for(int i=0;i<n-1;i++) { for(int j=0;j<n-1-i;j++) { if(a[j]>a[j-1]) swap(a[

【資料結構】直接插入排序詳細解釋希爾排序直接選擇排序選擇排序

一、直接插入排序 將一個數組進行直接插入排序,每次取陣列中一個數A儲存起來,和此數下標之前已經排好的陣列進行比較(第一次因為前面沒有數,直接取陣列第二個數),假設需要升序數列,如果A數小於要比較的數,就繼續往陣列中更小下標的數比較(在這個過程中因為A數已經儲存起

3. 排序通常有多種演算法,如氣泡排序插入排序選擇排序希爾排序歸併排序快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)

3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現  [分值:20] 您的回答:(空)  (簡答題需要人工評分) package com.interview; /** * 各種排序演算法 */

使用js實現5種加密解密演算法(凱撒密碼字母倒排序單表置換維基利亞轉換加密演算法)

在學習作業系統的時候,我們會學到系統安全的章節,而在這一塊會有關於加密解密演算法的學習。 一共有5種常見的加密解密演算法:凱撒密碼、字母倒排序、單表置換、維基利亞、轉換加密演算法。  我使用了js實現了這5種演算法,而且做了視覺化處理、輸入輸出格式化處理,使得操作起來非常

C語言中常用排序演算法(氣泡排序選擇排序插入排序希爾排序快速排序排序)實現比較

以下程式在win10 X64位作業系統,使用VS2017執行驗證可行 排序是非常重要且很常用的一種操作,有氣泡排序、選擇排序、插入排序、希爾排序、快速排序、堆排序等多種方法。 例項1 冒泡法排序 1.前言: 陣列中有N個整數,用冒泡法將它們從小到大(或從大到小)排序。冒泡法

演算法初級02——荷蘭國旗問題隨機快速排序排序

public static void heapSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 0; i <

python使用pandas模組實現檔案讀取字串處理去重排序excel生成

最近學習python,用python實現一個小需求,最後寫入excel使用到pandas模組: 某中學學生在500米短跑訓練比賽中的資料,體育老師把學生成績結果記錄在檔案中(studentdata.txt),記錄格式如下: 卡納瓦, 2001-11-8,2:27,2:33,

演算法與資料結構(十三) 氣泡排序插入排序希爾排序選擇排序(Swift3.0版)

本篇部落格中的程式碼實現依然採用Swift3.0來實現。在前幾篇部落格連續的介紹了關於查詢的相關內容, 大約包括線性資料結構的順序查詢、折半查詢、插值查詢、Fibonacci查詢,還包括數結構的二叉排序樹以及平衡二叉樹的構建與查詢,然後還聊了雜湊表的構建與查詢。接下來的幾篇部落格中我們就集中的聊一下常見的集中

三種基本排序-氣泡排序直接插入排序選擇排序

氣泡排序(從大到小)        原理:對於n個數,需要進行n-1次掃描,每次掃描通過相鄰兩個數的比較,找出最大的數,放到數列頂部。       程式:     1.氣泡排序1:每次掃描把下一個元素和最前面的元素比較,一次掃描結束後,最大的元素就在最前面了。      vo