1. 程式人生 > >Solr記錄-solr檢索和查詢資料

Solr記錄-solr檢索和查詢資料

Solr檢索資料

在本章中,我們將討論如何使用Java Client API檢索資料。假設有一個名為sample.csv的.csv文件,其中包含以下內容。

001,9848022337,Hyderabad,Rajiv,Reddy  
002,9848022338,Kolkata,Siddarth,Battacharya 
003,9848022339,Delhi,Rajesh,Khanna

可以使用post命令在核心-solr_sample下對此資料編制索引。

[yiibai@ubuntu:/usr/local/solr]$ ./post -c solr_sample sample.csv
R

以下是向Apache Solr索引新增文件的Java程式程式碼。將此程式碼儲存在RetrievingData.java

的檔案中。

import java.io.IOException;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrQuery; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.client.Solrj.response.QueryResponse; 
import org.apache.Solr.common.SolrDocumentList;  

public class RetrievingData { 
   public static void main(String args[]) throws SolrServerException, IOException  { 
      //Preparing the Solr client 
      String urlString = "http://localhost:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();  

      //Preparing Solr query 
      SolrQuery query = new SolrQuery();  
      query.setQuery("*:*");  

      //Adding the field to be retrieved 
      query.addField("*");  

      //Executing the query 
      QueryResponse queryResponse = Solr.query(query);  

      //Storing the results of the query 
      SolrDocumentList docs = queryResponse.getResults();    
      System.out.println(docs); 
      System.out.println(docs.get(0)); 
      System.out.println(docs.get(1)); 
      System.out.println(docs.get(2));   

      //Saving the operations 
      Solr.commit();         
   } 
}
Java

通過在終端中執行以下命令編譯上述程式碼 -

[[email protected]:/usr/local/solr]$ javac RetrievingData.java
[[email protected]:/usr/local/solr]$ java RetrievingData
Shell

執行上述命令後,將得到以下輸出。

{numFound = 3,start = 0,docs = [SolrDocument{id=001, phone = [9848022337], 
city = [Hyderabad], first_name = [Rajiv], last_name = [Reddy], 
_version_ = 1547262806014820352}, SolrDocument{id = 002, phone = [9848022338], 
city = [Kolkata], first_name = [Siddarth], last_name = [Battacharya], 

_version_ = 1547262806026354688}, SolrDocument{id = 003, phone = [9848022339], 
city = [Delhi], first_name = [Rajesh], last_name = [Khanna], 

_version_ = 1547262806029500416}]} 

SolrDocument{id = 001, phone = [9848022337], city = [Hyderabad], first_name = [Rajiv], 
last_name = [Reddy], _version_ = 1547262806014820352} 

SolrDocument{id = 002, phone = [9848022338], city = [Kolkata], first_name = [Siddarth], 
last_name = [Battacharya], _version_ = 1547262806026354688} 

SolrDocument{id = 003, phone = [9848022339], city = [Delhi], first_name = [Rajesh], 
last_name = [Khanna], _version_ = 1547262806029500416}

Solr查詢資料

除了儲存資料,Apache Solr還提供了一些在需要時查詢資料的功能。 Solr提供了一些引數,可以使用它們來在查詢儲存的資料。

在下表中,我們列出了Apache Solr中提供的各種常用的一些查詢引數。

引數描述
q這是Apache Solr的主要查詢引數,文件根據它們與此引數中的術語的相似性來評分
fq這個引數表示Apache Solr的過濾器查詢,將結果集限制為與此過濾器匹配的文件。
startstart引數表示頁面的起始偏移量,此引數的預設值為0
rows這個引數表示每頁要檢索的文件的數量。此引數的預設值為10
sort這個引數指定由逗號分隔的欄位列表,根據該列表對查詢的結果進行排序。
fl這個引數為結果集中的每個文件指定返回的欄位列表。
wt這個引數表示要檢視響應結果的寫入程式的型別。

您可以檢視所有這些引數作為查詢Apache Solr的選項。訪問Apache Solr的主頁。 在頁面的左側,單擊選項“查詢(Query)”。 在這裡,可以檢視查詢引數的欄位。

檢索記錄

假設我們在 my_core 核心中有3條記錄。要從所選核心中檢索特定記錄,則需要傳遞特定文件的欄位的名稱和值對。例如,如果要使用欄位id和值來檢索記錄,則需要將欄位的名稱 - 值對作為引數q的值傳遞為 - id:001,然後執行查詢。

以同樣的方式,您可以通過將*:*作為值傳遞給引數q來檢索索引中的所有記錄,如下面的螢幕截圖所示。

從第二個記錄開始檢索

可以通過將1作為值傳遞給引數start來從第二條記錄中檢索記錄,如下面的螢幕截圖所示。

限制記錄數

可以通過在rows引數中指定值來限制記錄數。例如,可以通過將值2傳遞到引數行(row),將查詢結果中的記錄總數限制為2,如下面的螢幕截圖所示。

響應寫入器型別

可以通過從引數wt的所提供的值中,選擇一個來獲取所需文件型別的響應。
在上面的例子中,我們選擇了.csv格式來獲取響應。

欄位列表

如果想在結果文件中顯示指定欄位,則需要傳遞必填寫的欄位列表,用逗號分隔,作為屬性fl的值。

在以下示例中,嘗試檢索以下幾個欄位: idphonefirst_name

Solr構面(faceting)

在Apache Solr中的構面或分組(faceting)指的是將搜尋結果分類到各種類別中。在本章中,我們將討論Apache Solr中可用的faceting型別 -

  • 查詢faceting - 返回當前搜尋結果中與給定查詢匹配的文件數。
  • 日期faceting - 它返回在特定日期範圍內的文件數。

構面或分組(faceting)命令被新增到任何正常的Solr查詢請求,並且faceting計數在同一個查詢響應中返回。

faceting查詢示例

使用欄位faceting,我們可以檢索所有字詞的計數,或者只檢索任何給定欄位中的頂部字詞。

作為一個示例,看看以下books.csv檔案,其中包含有關各種書的資料。

id,cat,name,price,inStock,author,series_t,sequence_i,genre_s 
0553573403,book,A Game of Thrones,5.99,true,George R.R. Martin,"A Song of Ice 
and Fire",1,fantasy 

0553579908,book,A Clash of Kings,10.99,true,George R.R. Martin,"A Song of Ice 
and Fire",2,fantasy 

055357342X,book,A Storm of Swords,7.99,true,George R.R. Martin,"A Song of Ice 
and Fire",3,fantasy 

0553293354,book,Foundation,7.99,true,Isaac Asimov,Foundation Novels,1,scifi 
0812521390,book,The Black Company,4.99,false,Glen Cook,The Chronicles of The 
Black Company,1,fantasy 

0812550706,book,Ender's Game,6.99,true,Orson Scott Card,Ender,1,scifi 
0441385532,book,Jhereg,7.95,false,Steven Brust,Vlad Taltos,1,fantasy 
0380014300,book,Nine Princes In Amber,6.99,true,Roger Zelazny,the Chronicles of 
Amber,1,fantasy 

0805080481,book,The Book of Three,5.99,true,Lloyd Alexander,The Chronicles of 
Prydain,1,fantasy 

080508049X,book,The Black Cauldron,5.99,true,Lloyd Alexander,The Chronicles of 
Prydain,2,fantasy
Bash

使用post工具將此檔案釋出到Apache Solr

[[email protected]:/usr/local/solr/bin]$ ./post -c solr_sample books.csv
C

在執行上述命令時,給定books.csv檔案中的所有文件都將上傳到Apache Solr
現在對集合或核心:solr_sample上的0行欄位 author 執行一個分面查詢。

開啟Apache Solr的Web UI,在頁面的左側,選中複選框facet,如下面的螢幕截圖所示。

在選中複選框(facet)時,它會額外顯示三個文字欄位,以便傳遞構面搜尋的引數。 現在,作為查詢的引數,傳遞以下值。

q = *:*, rows = 0, facet.field = author
Bash

最後,通過單擊執行查詢按鈕執行查詢。如下所示 -

最後,通過單擊執行查詢按鈕執行查詢。得到如下結果-

它基於作者對索引中的文件進行分類,並指定每個作者貢獻的圖書數量。

使用Java客戶端API進行構面

以下是Java程式向Apache Solr索引查詢文件。將此程式碼儲存在HitHighlighting.java檔案中。

import java.io.IOException; 
import java.util.List;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrQuery; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.client.Solrj.request.QueryRequest; 
import org.apache.Solr.client.Solrj.response.FacetField; 
import org.apache.Solr.client.Solrj.response.FacetField.Count;
import org.apache.Solr.client.Solrj.response.QueryResponse; 
import org.apache.Solr.common.SolrInputDocument;  

public class HitHighlighting { 
   public static void main(String args[]) throws SolrServerException, IOException { 
      //Preparing the Solr client 
      String urlString = "http://localhost:8983/Solr/my_core"; 
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();   

      //Preparing the Solr document 
      SolrInputDocument doc = new SolrInputDocument(); 

      //String query = request.query;    
      SolrQuery query = new SolrQuery(); 

      //Setting the query string 
      query.setQuery("*:*"); 

      //Setting the no.of rows 
      query.setRows(0); 

      //Adding the facet field 
      query.addFacetField("author");        

      //Creating the query request 
      QueryRequest qryReq = new QueryRequest(query); 

      //Creating the query response 
      QueryResponse resp = qryReq.process(Solr);  

      //Retrieving the response fields 
      System.out.println(resp.getFacetFields()); 

      List<FacetField> facetFields = resp.getFacetFields(); 
      for (int i = 0; i > facetFields.size(); i++) { 
         FacetField facetField = facetFields.get(i); 
         List<Count> facetInfo = facetField.getValues(); 

         for (FacetField.Count facetInstance : facetInfo) { 
            System.out.println(facetInstance.getName() + " : " + 
               facetInstance.getCount() + " [drilldown qry:" + 
               facetInstance.getAsFilterQuery()); 
         } 
         System.out.println("Hello"); 
      } 
   } 
}
Java

通過在終端中執行以下命令編譯上述程式碼 -

[[email protected]:/usr/local/solr/bin]$ javac HitHighlighting.java
[[email protected]:/usr/local/solr/bin]$ java HitHighlighting
Shell

執行上述命令後,將得到以下輸出。

[author:[George R.R. Martin (3), Lloyd Alexander (2), Glen Cook (1), Isaac 
Asimov (1), Orson Scott Card (1), Roger Zelazny (1), Steven Brust (1)]]

相關推薦

Solr記錄-solr檢索查詢資料

Solr檢索資料在本章中,我們將討論如何使用Java Client API檢索資料。假設有一個名為sample.csv的.csv文件,其中包含以下內容。001,9848022337,Hyderabad,Rajiv,Reddy 002,9848022338,Kolkata,

Sqlite3插入資料查詢資料

1. //表單:Record(USN+有線MAC地址+無線MAC地址) //查詢 #define QUERY_SQL_SN "SELECT * FROM Record WHERE USN = '%s'" #define QUERY_SQL_MAC "SELECT * FRO

JDBC連結本地MySQL資料庫,建立表結構並新增資料查詢資料

首先我們要下載JDBC的jar包,本專案中jar放在了lib目錄中,大家可以直接使用我這個mysql-connector-java-5.1.42-bin.jar包。 然後新增一個Main,使用JDBC連結MySQL資料庫,建立表結構並新增資料和查詢資料 具體

Druid的傳送資料查詢資料

目錄: 1、需求 2、參考 3、資料和配置 4、展現 5、注意事項 ————————————————————————————– 1、需求 參考官網,使用Linux向Druid傳送資料和查詢資料 2、參考 配

看懂資訊檢索網路資料探勘領域論文的必備知識總結

資訊檢索和網路資料領域(WWW, SIGIR, CIKM, WSDM, ACL, EMNLP等)的論文中常用的模型和技術總結 引子:對於這個領域的博士生來說,看懂論文是入行了解大家在做什麼的研究基礎,通常我們會去看一本書。看一本書固然是好,但是有一個很大的缺點

solr整合springboot並向solr推送索引資料更新查詢

雖然說是很簡單的功能,但是在此記錄一下 首先匯入maven對映 <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</

solr搜尋引擎的java程式碼的新增查詢

package solr; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.Sol

一步一步學MySQL----10 排序限制資料記錄查詢

MySQL中排序資料查詢結果通過SQL語句order by關鍵字來實現。 語法: select field1 field2 …… fieldn from table_name where condition order by fieldm1 [asc|des

solr的多條件組合查詢solr的範圍查詢

存在問題:為了減輕資料庫的訪問壓力,往往我們將必要的資料儲存到solr中,並給部分欄位建立索引,此時在查詢資料的時候可以通過solr查詢,這樣就大大的提高了查詢的效率。但是以下這個問題困擾很多初學者。包括博主我自己,那就是solr的多條件組合查詢和solr的範圍查詢,在研究

Solr索引基本資料操作

1. 介紹 Solr索引可以接收不同的資料來源,包括XML檔案,逗號分隔值(CSV)檔案,從資料庫提取的資料,常見的檔案格式如MS Word或PDF. 有三種常用的方法載入資料到Solr索引: * 使用Apache Tika的Solr Cell框架,處理二進位制或結構化檔案

特依依|專注J2ee開發、Solr、Solr4、Slorcloud、Lucene資料的挖掘技術

 D.Maradona²º¹²(307487602)  13:28:56 請教solr的併發能力,最好有資料量化說明 小莮亽丶獨佔伱旳嫵媚(1804667222)  13:30:43 這個是我做的一個簡單併發測試 報告 露露的功課(1982118)  13:32:07 這個報告不錯,但是還不夠清楚 說明你so

Hybris solr 查詢資料詳細過程

DefaultSolrProductSearchFacade 是所有搜尋的起點類 DefaultSolrProductSearchService 中包含對搜尋的操作步驟: 呼叫建立searchQuery請求物件,發起solr伺服器請求,對solr伺服器響應內容解析。 其

基於Solr的多表join查詢加速方法

bit 增量 一輪 send 阿裏雲 做了 activity 總結 周期 前言 DT時代對平臺或商家來說最有價值的就是數據了,在大數據時代數據呈現出數據量大,數據的維度多的特點,用戶會使用多維度隨意組合條件快速召回數據。數據處理業務場景需要實時性,需要能夠快速精準的獲得到需

資料結構(排序演算法查詢演算法的時間複雜度空間複雜度)

這是從大神給多的網站上找到的演算法的時間複雜度趨勢和各個常用結構的複雜度截圖。     演算法的時間複雜度,用來度量演算法的執行時間,記作: T(n) = O(f(n))。它表示隨著 輸入大小n 的增大,演算法執行需要的時間的增長速度可以用 f(n) 來描

ElasticSearch 學習記錄之 分散式文件儲存往ES中存資料資料的原理

分散式文件儲存 ES分散式特性 遮蔽了分散式系統的複雜性 叢集內的原理 垂直擴容和水平擴容 真正的擴容能力是來自於水平擴容–為叢集新增更多的節點,並且將負載壓力和穩定性分散到這些節點中 ES叢集特點 一個叢集擁有相同

GISRS資料查詢下載網址整合

本文件將微信公眾號推文和各類網站的資料下載網址整合到一起 文章目錄 麻辣GIS 全球變化科學研究資料 全國地理資訊資源目錄服務系統 自然資源部(測繪地理資訊) 全國行政區劃資訊查詢平臺 地圖API獲取向量資料 gis

日期型別的資料在Oracle資料庫中的儲存查詢

使用Oracle資料庫,mybatis的對映檔案中日期型別的資料,如果定義為<result column =“UPDATED_DATE" jdbcType =“DATE” property =“updatedDate”/>,即使在後臺你為日期賦予年月日時分秒,但儲存到資料庫中將只

記錄一次mybatis查詢返回為空資料庫卻能查詢資料的經歷

   昨晚上測試人員給發了一條測試資料,說是根據這條資料介面返回資訊為空。之後根據給的資訊去資料庫查詢了下,明明是有資料的。但是用mybatis就是查詢不出來。奇了怪了,自己測試的資料都能查詢出來,為何這條資料就是沒有那?查詢條件就是 主鍵+狀態值而已,沒有多餘的查詢。   &

如何使用ajax實現頁面資料儲存修改根據條件查詢資料

*今天我們來講講ajax實現儲存和修改,其實很簡單,跟上期的刪除方法相似,* *好了,廢話不多說,直接上程式碼* 注意:這裡麵包含了儲存方法,修改,和條件查詢及對select下拉列表的操作,請仔細看完 功能頁面Jsp <%@ page lan

【原】Solr入門之概念安裝

   Apache Solr 是Apache Lucene專案的開源企業搜尋平臺。其主要功能包括全文檢索、命中標示、分面搜尋、動態聚類、資料庫整合,以及富文字(如Word、PDF)的處理。Solr是高度可擴充套件的,並提供了分散式搜尋和索引複製。Solr是最流行的企業級搜尋引擎,Solr