1. 程式人生 > >elasticsearch之全文搜尋

elasticsearch之全文搜尋

1.場景還原

   近期,筆者專案中需要通過關鍵字來搜尋與之相關的資料,es的全文搜尋終於派上用場了!

2.準備步驟

②在es的plugins目錄下建立ik,然後解壓縮ik

③在elasticsearch.yml配置ik屬性

index.analysis.analyzer.default.tokenizer : "ik_max_word"
index.analysis.analyzer.default.type : "ik"

3.實現方案

/**
 * 全文索引
 * @param index
 * @param type
 * @return
 */
public List hotCitySearchByEs(String index, String type,String startCity, String endCity,SortBuilder sortBuilder,QueryBuilder queryBuilder,Integer pageNo,Integer pageSize) {
       TransportClient  client = getClient();
        //查詢條件 在匹配文字的時候一定用matchQuery termQuery 用於精確匹配 匹配數字 ,long型 term查詢不會分詞
        //matchQuery自帶分詞;
        //termQuery不帶分詞器
    QueryBuilder qb = boolQuery().must(termQuery("pinStartPoint", startCity))
                                 .must(termQuery("pinEndPoint", endCity));

                //索引
        SearchResponse response = client.prepareSearch(index)
                //type
                .setTypes(type)
                //搜尋型別
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                // Query
                .setQuery(qb)
                //排序
                .addSort(sortBuilder)
                //過濾
                .setPostFilter(queryBuilder)
                //分頁
                .setFrom(pageNo).setSize(pageSize).setExplain(true)
                //執行
                .execute()
                .actionGet();

    return response2List(client,response);

}
/**
 * 將查詢後獲得的response轉成list
 * @param client
 * @param response
 * @return zx
 */
public static List response2List(TransportClient client,SearchResponse response){
    SearchHits hits = response.getHits();
    List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
    for (int i = 0; i < hits.getHits().length; i++) {
        BigDecimal geoDis = new BigDecimal((Double) hits.getAt(i).getSortValues()[0]);
        Map<String, Object> map = hits.getAt(i).getSource();
        map.put(EsProperties.ES_SERVICE_DISTANCE_TO,geoDis);
        list.add(map);
    }
    client.close();
    return list;
}

好了,今天點到為止,我是張星,歡迎加入博主技術交流群,群號:526601468

相關推薦

elasticsearch全文搜尋

1.場景還原    近期,筆者專案中需要通過關鍵字來搜尋與之相關的資料,es的全文搜尋終於派上用場了! 2.準備步驟 ②在es的plugins目錄下建立ik,然後解壓縮ik ③在elasticsearch.yml配置ik屬性 index.analysis.ana

Elasticsearch構建全文搜尋系統

[toc] # 前言 Elasticsearch 是一個分散式、可擴充套件、實時的搜尋與資料分析引擎,通過它我們可以構建出一個強大的全文搜尋系統,解決諸如文章檢索慢,商品檢索慢、MySQL的like查詢慢這樣的問題。 Elasticsearch是基於hadoop創始人道哥的另一傑作Lucene實現的,速度非

瞭解學習 Elasticsearch 及其與 Python 實現全文搜尋

Elasticsearch簡介 ElasticSearch是一個基於Lucene的搜尋伺服器.它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計

ElasticSearch最佳入門實踐(三十八)精確匹配與全文搜尋的對比分析

1、ES中的兩種搜尋模式 1、exact value 2、full text 2、exact value 2017-01-01,exact value,搜尋的時候,必須輸入2017-01-01,才能搜尋出來。如果你輸入一個01,是搜尋不

全文搜尋技術--solr7.1mysql的安裝步驟

1.安裝命令 #>線上安裝wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 輸完上面一句話不能正常的下載安裝包可以試試下面這句話 yum -y install wget 然後繼續執行下面的語句 rpm -ivh

全文搜尋技術--Solr7.1配置中文分析器

前言:中國文化博大精深,但是solr只能一個一個的識別,而是更加符合中國人的習慣,所以加了中文分析器。 1.安裝中文分詞器 第一步:把中文分詞器(ik-analyzer-solr7-7.x.jar)/usr/local/solr_tomcat/webapps/solr/WEB-INF/lib下 第二步:

[ElasticSearch]Java API 滾動搜尋(Scroll API)

一般搜尋請求都是返回一"頁"資料,無論資料量多大都一起返回給使用者,Scroll API可以允許我們檢索大量資料(甚至全部資料)。Scroll API允許我們做一個初始階段搜尋並且持續批量從Elasticsearch里拉取結果直到沒有結果剩下。這有點像傳統資料庫裡的cursors(遊標)。 Sc

使用haystack實現Django的全文搜尋 -- Elasticsearch搜尋引擎

全文搜尋: 在使用python進行web開發的時候,免不了需要使用到全文搜尋;全文搜尋和我們平常使用的資料庫的模糊搜尋查詢不一樣,例如在mysql資料庫中,如果進行模糊查詢,比如 name like '%wang%'這一類的,效率是非常低的;而我們需求的全文搜尋,在效率方面要求是很高

全文搜尋儲存引擎 Elasticsearch 一點點

開始請大家想一個問題,如何統計一個Web站點的有效PV? 針對使用者請求的URL,統計時做模式匹配-------->即使用者真正去開啟一個站點的有效頁面並對每個頁面的入口的訪問做一個統計瀏覽量; 簡要搜尋引擎 搜尋引擎在網際網路上特別多有專業(Startpage,Google,Yah

Elasticsearch學習深入搜尋一 --- 提高查詢的精準度

為帖子增加標題欄位 POST /forum/article/_bulk { "update": { "_id": "1"} } { "doc" : {"title" : "this is java and elasticsearch blog"} } { "update":

Elasticsearch全文搜尋控制精準度

前言 本文主要是關於全文搜尋控制精準度的操作 其他搜尋請參考: 一、使用operator 搜尋結果中必須至少包括run、jump兩種愛好 GET people/_search {

ASP.NET Web API + Elasticsearch 6.x 快速做個全文搜尋

最近想做個全文搜尋,設想用 ASP.NET Web API + Elasticsearch 6.x 來實現。 網上搜了下 Elasticsearch 的資料,大部分是講 linux 平臺下如何用 java 來開發,有少量講在 windows 平臺下用 c# 開發的,且版本是 Elasti

[Elasticsearch] 全文搜尋 (二)

多詞查詢(Multi-word Queries) 如果我們一次只能搜尋一個詞,那麼全文搜尋就會顯得相當不靈活。幸運的是,通過match查詢來實現多詞查詢也同樣簡單: GET /my_index/my_type/_search { "query": {

Mysql全文搜尋MATCH...AGAINST的用法介紹

前提:mysql只支援英文內容的全文索引,所以只考慮英文的全文搜尋。假定資料表名為post,有三列:id、title、content。id是自增長序號,title是varchar,content是text,給content新增全文索引。 mysql全文搜尋有三種模式:一、自

laravel-elasticsearch 全文搜尋設定

1、首先安裝 jave環境 jdk 下載地址 ,我用的是最新版本的,有時版本要跟elasticsearch對應 2、安裝elasticsearch 下載地址 3、安裝Laravel scout 全文搜尋包,這裡我用的是5.0.3版本,tamayo/laravel-scout-elastic .這

Elasticsearch四種查詢型別和搜尋原理

Elasticsearch Client傳送搜尋請求,某個索引庫,一般預設是5個分片(shard)。   它返回的時候,由各個分片彙總結果回來。    官網API https://www.elastic.co/guide/en/elasticsea

elasticsearch筆記_全文搜尋_query(五)

全文搜尋(Query) 全文搜尋最重要的兩個方面就是”相關性(Relevance)”和”分析(Analysis)” . 相關性(Relevance) 每個文件都有相關性評分,用一個正浮點數字段 _score 來表示 。_score 評分越高 ,

[Elasticsearch] 全文搜尋 (三)

match查詢是如何使用bool查詢的 現在,你也許意識到了使用了match查詢的多詞查詢只是簡單地將生成的term查詢包含在了一個bool查詢中。通過預設的or操作符,每個term查詢都以一個語句被新增,所以至少一個should語句需要被匹配。以下兩個查詢是等價的:

Elasticsearch (21)字首搜尋、萬用字元搜尋、正則搜尋、推薦搜尋 和 模糊搜尋

1、字首搜尋搜尋包含KDKE字首的articleID GET /forum/article/_search { "query": { "prefix": { "articleID": { "value": "KDKE" }

Elasticsearch:一個方便易用的全文搜尋

注:本文內容均來自《Elasticsearch權威指南》,是做讀書筆記,同時做一個總結。 Elasticsearch是使用基於http的RestFul來實現和使用的,因此使用curl來測試。如果不使用curl,使用各種語言的對應http請求即可使用。 Ela