1. 程式人生 > >Solr的學習總結一

Solr的學習總結一

心語:因為以前一直接觸的都是關係型資料庫,所有在接觸到這些nosql的時候確實不太適應。在公司有經常的用到。這個學習起來並不困難,但為了以後的複習。我決定還是寫下自己學習的一些技巧和心得

Solr的環境配置

查詢引數

  1. 基本查詢
    這裡寫圖片描述

  2. Solr的檢索運算子
    這裡寫圖片描述
    當然了這些概念性的東西肯定是要看的 solr 查詢引數

solr在Java中的應用

當然了這部分才是重點,因為在實際的開發中我們只要求會用,至於其他的可以慢慢在學

  • solr的連線
 //指定solr伺服器地址
    private final static String SOLR_URL = "http://172.16.0.104:13087/solr/fuzzyQySRCdoc_shard12_replica2"
; //建立solrClient物件 public static HttpSolrClient solrClient() { HttpSolrClient solrClient = new HttpSolrClient(SOLR_URL); return solrClient; }
  • 通過指定欄位查詢,並以JsonArray形式返回
public JSONArray solrInfo(List<String> readIDs ) throws IOException, SolrServerException { 
        JSONArray listInfo = new
JSONArray(); //得到solr連線 HttpSolrClient solrClient = EntityListInfo.solrClient(); SolrQuery solrQuery = new SolrQuery(); //遍歷ids集合 for (String id : readIDs) { solrQuery.set("q", "entitys_id:" + "\"" + id + "\""); QueryResponse response = solrClient.query(solrQuery); SolrDocumentList documentList = response.getResults(); for
(SolrDocument document : documentList) { //將document轉成json Set<Map.Entry<String, Object>> entrySet = document.entrySet(); JSONObject object = new JSONObject(); for (Map.Entry<String, Object> objectEntry : entrySet) { if (objectEntry.getKey().equals("_version")) { continue; } object.put(objectEntry.getKey(), objectEntry.getValue()); } listInfo.add(object); //System.out.println(document.toString().replace("SolrDocument","")); break; } } return listInfo; }

細心的可以看出將document的遍歷很像map的遍歷,不太熟的可以map的四種遍歷方式

  • solr分頁查詢並將得到的資訊儲存到文字中
//通過id去找到solr的doc_id
    public void solrDocId() throws IOException, SolrServerException {
    //得到需要的所有id
        List<String> readIDs = readIDs();
        HttpSolrClient solrClient = EntityListInfo.solrClient();
        SolrQuery solrQuery = new SolrQuery();
        for (String id : readIDs) {
            System.out.println(id);
            long start = 0;
            long rows = 500;
            while (true) {
                try {
                    ModifiableSolrParams params = new ModifiableSolrParams();
                    params.add("q", "*:*");
                    params.add("fq", "entity_ids:" + "\"" + id + "\"");
                    params.add("start", String.valueOf(start));
                    params.add("rows", String.valueOf(rows));
                    QueryResponse queryResponse = solrClient.query(params);
                    if (queryResponse == null) {
                        continue;
                    }
                    SolrDocumentList solrDocuments = queryResponse.getResults();
                //獲取總數,可以在solr admin裡面檢視
                    long docNumbers = solrDocuments.getNumFound();
                    if (solrDocuments.isEmpty()) {
                        break;
                    }
                    // 插入solr資料到文字
                    for (SolrDocument document : solrDocuments) {
                        Set<Map.Entry<String, Object>> entrySet = document.entrySet();
                        JSONObject object = new JSONObject();
                        for (Map.Entry<String, Object> objectEntry : entrySet) {
                            if (objectEntry.getKey().equals("_version")) {
                                continue;
                            }
                            object.put(objectEntry.getKey(), objectEntry.getValue());
                        }
                        writeInfo("F:\\info\\doc_id.txt", object);
                        System.out.println(document.get("doc_id"));
                        //listInfo.add(object);                       
                    }
                    //確定分頁結束的條件
                    if (start + rows >= docNumbers) {
                        break;
                    } else {
                        start = start + rows;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return;
    }

總結:像solr的增刪改這裡就沒有提到,可以參考SOLR CRUD操作
當然了最好的還是去菜鳥裡面先有個大概的瞭解