搜索應用參考示例XXL-SEARCH

GitHub release
License
donate

1、簡介

1.1 概述

XXL-SEARCH 是以 "lucene/elasticsearch" 爲核心的,Pragmatic風格的搜索應用參考示例,是索引搜索世界中的主流技術選型,最佳實踐的總結與演示。html

1.2 特性

  • 一、Quickstart:一個完整的 "搜索列表頁" 演示應用,演示搜索的開發和使用的完整流程。git

    《演示功能列表》
    - 一、新增一條索引:
    - 索引字段支持 "排序"
    - 索引字段支持 "分詞";
    - 一個Field支持索引綁定多個值, 實現一對多索引List功能; 好比在商戶打標籤時, 能夠給一個商戶打上多個標籤;
    - 二、更新一條索引
    - 三、刪除一條索引
    - 四、清空索引
    - 五、查詢:
    - 精確查詢: 根據綁定的索引, 進行精確查詢;
    - 分詞查詢: 經過分詞, 進行模糊查詢;
    - 範圍查詢: 針對同一個字段, 支持在指定區間內查詢;
    - 關聯查詢: 針對不一樣字段, 支持多字段關聯查詢;
    - 分頁: 支持分頁功能;
    - 排序: 支持排序功能;github

  • 二、多種方案:目前演示項目, 基於 "lucene、elasticsearch" 兩種方案分別進行演示了開發流程。
  • 三、"搜索小程序", 基於Lucene實現, 能夠生成 "索引庫文件", copy該文件至任何系統, 可嵌入式的增長系統的搜索功能;小程序

1.3 下載

源碼倉庫地址

源碼倉庫地址 Release Download
https://github.com/xuxueli/xxl-search Download
https://gitee.com/xuxueli0323/xxl-search Download

技術交流

1.4 環境

  • Maven3+
  • Jdk1.7+
  • Tomcat7+elasticsearch

  • Lucene5+
  • Elasticsearch2+maven

2、用例演示

源碼目錄介紹

- /xxl-search-client    : "xxl-search-example" 依賴的搜索核心包, 內置lucene、elasticsearch 兩種搜索實現方案;
- /xxl-search-example   : "搜索列表頁" 演示項目, 基於 "xxl-search-client" 實現;
- /xxl-search-embed     : "搜索小程序" 項目, 基於Lucene實現, 能夠生成 "索引庫文件", copy該文件至任何系統, 可嵌入式的增長系統的搜索功能;

主要包括下面兩個項目:分佈式

  • 一、"搜索列表頁" 演示項目 ("xxl-search-client" 和 "xxl-search-example" 組成);

示例以一個完整的 "搜索列表頁" 應用展開,能夠覆蓋大部分搜索列表開發需求。搜索列表需求互聯網互聯網公司很是常見, 如 "淘寶的商品搜索列表頁"、"京東的商戶搜索列表頁" 和 "安居客的房產搜索列表頁" 等;優化

  • 二、"搜索小程序" 項目 ("xxl-search-embed" 組成);

基於Lucene實現, 能夠生成 "索引庫文件", copy該文件至任何系統, 可嵌入式的增長系統的搜索功能;ui

一、"搜索列表頁" 演示項目

見項目 "xxl-search-example"excel

  • 一、設置搜索方案

輸入圖片說明

目前, 針對 "搜索列表頁" 的演示項目, 已經內置實現兩種搜索方案, 經過上圖參數 "xxl.search.type" 配置:

ES : 基於elasticsearch的方案, 依賴elasticsearch集羣, 自然支持分佈式;
LUCENE : 基於lucene的方案, 不依賴第三方服務, 可是原生lucene開發不支持分佈式;
  • 二、配置 "lucene"方案 的索引目錄 (搜索方案選擇爲 LUCENE 時有效)

如上圖, 設置參數 "lucene.directory" 的值爲指定磁盤目錄便可;

  • 三、配置 "elasticsearch"方案 的集羣地址 (搜索方案選擇爲 ES 時有效)

如上圖, 設置參數 "es.address" 的值爲elasticsearch的集羣地址便可, 地址格式爲 "ip1:port,ip2:port" ;

  • 四、部署並訪問 "搜索列表頁"

部署 "xxl-search-example" 項目, 訪問項目跟地址便可:

輸入圖片說明

從上圖可知, 演示界面主要分爲兩個區域:

搜索區域: 即頁面上方的 "條件篩選區域" 和 "搜索列表區域", 提供對索引數據的查詢;
原始數據區域: 即頁面下方 "商戶原始數據" 列表區域, 提供對索引數據的 CRUD 功能;

"搜索列表頁" 演示頁面功能介紹:

操做操做相關:
    一、"清空索引庫" 按鈕: 清空所有索引數據;
    二、"全量索引" 按鈕: 以 "商戶原始數據" 列表中數據爲基礎 , 進行全量索引;
    三、"新增一行" 按鈕: 在 "商戶原始數據" 列表下新增一行, 完善數據後點擊 "保存" 按鈕, 可新增一條索引數據;
    四、"更新" 按鈕: 在 "商戶原始數據" 列表中每條記錄右側, 點擊後將會更新該條數據對應的索引;
    五、"刪除" 按鈕: 在 "商戶原始數據" 列表中每條記錄右側, 點擊後將會刪除該條數據對應的索引;
索引查詢相關:
    一、"商戶" 輸入框: 將會分詞查詢匹配的商戶;
    二、"城市" 單選框: 將會查詢對應城市下的商戶;
    三、"標籤" 複選框: 將會跟選中標籤綁定的商戶;
    四、"排序" 單選框: 將會選中排序字段進行商戶排序;

二、"搜索小程序" 項目

見項目 "xxl-search-example"

注意: 分詞器使用了 "IKAnalyzer", 須要確保本地maven倉庫中已經存在 "IKAnalyzer" 依賴。項目中已經提供了最新版本的 "IKAnalyzer" ,見路徑 "xxl-search/xxl-search-embed/src/test/resources/IKAnalyzer-5.3.0.jar"

一、運行進入主界面:

該項目是一個JAR項目, 主方法爲: com.xxl.search.embed.Application , 運行可查看主界面以下:

輸入圖片說明

二、配置 "索引模板參數", 生成索引模板 :

上圖中 "索引模板參數" 輸入框中, 能夠輸入多個參數, 定製索引模板。

多個參數用逗號 "," 分隔, 必須報刊參數 "keywords", 該參數對應的數據將會被索引分詞, 可經過下面搜索框搜索;

點擊 "生成模板" 按鈕, 將會在 "索引生成目錄" 輸入框對應的目錄下, 生成索引模板, 索引模板是一個 excel表格, 以下圖所示:

輸入圖片說明

三、根據索引模板, 填充索引數據 :

輸入圖片說明

四、生成索引文件:

點擊 "生成索引文件" 按鈕, 將會根據索引模板中的數據, 在 "索引生成目錄" 下的 "search_fs" 目錄中生成索引文件, 以下圖:

輸入圖片說明

五、索引查詢:

在最下方的 "搜索" 輸入框中輸入關鍵字, 點擊右側的 "搜索" 按鈕, 便可在索引文件中進行分詞搜索, 關鍵詞和索引模板中的參數 "keywords" 進行分詞匹配:

輸入圖片說明

可經過一下命令, 將項目打包成JAR包:

// package jar witch lib
mvn dependency:copy-dependencies -DoutputDirectory=lib   -DincludeScope=compile

3、技術實現

Lucene & Elasticsearch

4、歷史版本

1.2 特性

  • 一、Quickstart:一個完整的 "搜索列表頁" 演示應用,演示搜索的開發和使用的完整流程。

    《演示功能列表》
    - 一、新增一條索引:
    - 索引字段支持 "排序"
    - 索引字段支持 "分詞";
    - 一個Field支持索引綁定多個值, 實現一對多索引List功能; 好比在商戶打標籤時, 能夠給一個商戶打上多個標籤;
    - 二、更新一條索引
    - 三、刪除一條索引
    - 四、清空索引
    - 五、查詢:
    - 精確查詢: 根據綁定的索引, 進行精確查詢;
    - 分詞查詢: 經過分詞, 進行模糊查詢;
    - 範圍查詢: 針對同一個字段, 支持在指定區間內查詢;
    - 關聯查詢: 針對不一樣字段, 支持多字段關聯查詢;
    - 分頁: 支持分頁功能;
    - 排序: 支持排序功能;

  • 二、多種方案:目前演示項目, 基於 "lucene、elasticsearch" 兩種方案分別進行演示了開發流程。
  • 三、"搜索小程序", 基於Lucene實現, 能夠生成 "索引庫文件", copy該文件至任何系統, 可嵌入式的增長系統的搜索功能;

TODO

  • 一、新增 solr 搜索方案;
  • 二、新增 IK 等分詞器支持;
  • 三、底層API封裝優化;

5、其餘

5.1 項目貢獻

歡迎參與項目貢獻!好比提交PR修復一個bug,或者新建 Issue 討論新特性或者變動。

5.2 開源協議和版權

產品開源免費,而且將持續提供免費的社區技術支持。我的或企業內部可自由的接入和使用。

  • Licensed under the GNU General Public License (GPL) v3.
  • Copyright (c) 2015-present, xuxueli.

捐贈

不管金額多少都足夠表達您這份心意,很是感謝 :) 前往捐贈

相關文章
相關標籤/搜索