日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文、拼音、同义词搜索

發(fā)布時(shí)間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文、拼音、同义词搜索 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、簡(jiǎn)介

有時(shí)候我們需要在項(xiàng)目中支持中文 和 拼音的搜索。采用ik分詞來(lái)做中文分詞是目前比好的方式。至于拼音分詞可以采用lc-pinyin,雖然lc-pinyin能很好的解決首字母和全拼的搜索,但是在中文分詞上卻是不支持的,lc-pinyin只能把中文拆成單字來(lái)處理。要是能把IK分詞和lc-pinyin分詞結(jié)合那該多好,不是么?本文主要介紹如何把ik和lc-pinyin結(jié)合起來(lái)使用,使我們的搜索既支持中文搜索,又支持拼音搜索。

環(huán)境:elasticsearch1.4.5, elasticsearch-analysis-lc-pinyin1.4.5,elasticsearch-analysis-ik1.3.0


二、配置lc-pinyin和ik分詞器

1. 首先需要安裝lc-pinyin和ik分詞,這里就不再講如何安裝,不會(huì)的童鞋參考:http://blog.csdn.net/chennanymy/article/details/52336368

2. ?安裝好lc-pinyin和ik分詞插件后就可以配置分詞器額,打開(kāi) config/elasticsearch.yml文件,在末尾加上下面的配置

index:analysis:analyzer:ik_max_word:type: ikuse_smart: falseik_smart:type: ikuse_smart: trueik_syno:tokenizer: ikfilter: [ik_synonym_filter]ik_syno_smart:tokenizer: ik_tk_smartfilter: [ik_synonym_filter]lc:alias: [lc_analyzer]type: org.elasticsearch.index.analysis.LcPinyinAnalyzerProviderlc_index:type: lcanalysisMode: indexlc_search:type: lcanalysisMode: searchtokenizer:ik_tk_smart:type: ikuse_smart: truefilter:ik_synonym_filter:type: synonymsynonyms_path: analysis/synonym.txt

上面的配置定義了一個(gè)同義詞過(guò)濾器“ik_synonym_filter” 并指定了一個(gè)同義詞文件,該文件目錄結(jié)構(gòu)如下


對(duì)同義詞不熟悉的同學(xué),可以參考官網(wǎng)教程:https://www.elastic.co/guide/en/elasticsearch/reference/1.5/analysis-synonym-tokenfilter.html

到這里分詞器就配置完成了。


三、測(cè)試同義詞

下面我們就來(lái)測(cè)試一下同義詞是否有效,打開(kāi)同義詞配置文件在里面加入兩行


第一行同義詞表示當(dāng)要索引的文字中包含了 蠟燭、園丁、師傅、先生 都會(huì)被轉(zhuǎn)換成 老師 索引到文檔中

第二行同義詞表示當(dāng)出現(xiàn)中文、漢語(yǔ)、漢字中任何一個(gè)詞的時(shí)候都把上述3個(gè)詞索引到文檔中。所以這種方式是比較費(fèi)索引的


上圖可以看到我們配置的同義詞生效了。


四、搜索測(cè)試

首先創(chuàng)建索引和mapping,這里我們采用multi_field來(lái)做針對(duì)同一字段設(shè)置不同的分詞器

content字段采用拼音分詞,content.cn采用ik分詞

curl -XPUT http://localhost:9200/index curl -XPOST http://localhost:9200/index/fulltext/_mapping -d' {"fulltext": {"properties": {"content": {"type": "string","index_analyzer": "lc_index","search_analyzer": "lc_search","fields": {"cn": {"type": "string","index_analyzer": "ik_syno","search_analyzer": "ik_syno_smart"}}}}} }'
然后索引幾條數(shù)據(jù)

curl -XPOST http://localhost:9200/index/fulltext/1 -d' {"content":"湖北工業(yè)大學(xué)"} 'curl -XPOST http://localhost:9200/index/fulltext/2 -d' {"content":"華中科技大學(xué)"} 'curl -XPOST http://localhost:9200/index/fulltext/3 -d' {"content":"武漢大學(xué)"} 'curl -XPOST http://localhost:9200/index/fulltext/4 -d' {"content":"武漢理工大學(xué)"} ' curl -XPOST http://localhost:9200/index/fulltext/5 -d' {"content":"香港中文大學(xué)"} '



執(zhí)行查詢
@Testpublic void testMultiMatch() {final String index = "index";final String type = "fulltext";SearchRequestBuilder requestBuilder = elasticIndexOperateHelper.getClient().prepareSearch(index).setTypes(type);String input = "中文大學(xué)";QueryBuilder pinyinSearch = QueryBuilders.matchQuery("content", input).type(MatchQueryBuilder.Type.PHRASE).analyzer("lc_search").boost(4).zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE);QueryBuilder chineseSearch = QueryBuilders.matchQuery("content.cn", input).type(MatchQueryBuilder.Type.BOOLEAN).analyzer("ik_syno_smart").boost(8).zeroTermsQuery(MatchQueryBuilder.ZeroTermsQuery.NONE);QueryBuilder mixQueryBuilder = QueryBuilders.boolQuery().should(pinyinSearch).should(chineseSearch).minimumNumberShouldMatch(1);requestBuilder = requestBuilder.setQuery(mixQueryBuilder).setHighlighterPreTags("<tag1>", "<tag2>").setHighlighterPostTags("</tag1>", "</tag2>").addHighlightedField("content").addHighlightedField("content.cn").setHighlighterRequireFieldMatch(true);SearchResponse response = requestBuilder.execute().actionGet();System.out.println(requestBuilder);System.out.println(response);}
返回結(jié)果

{"took" : 734,"timed_out" : false,"_shards" : {"total" : 2,"successful" : 2,"failed" : 0},"hits" : {"total" : 5,"max_score" : 1.7481089,"hits" : [ {"_index" : "index","_type" : "fulltext","_id" : "5","_score" : 1.7481089,"_source": {"content":"武漢中文大學(xué)"} ,"highlight" : {"content.cn" : [ "武漢<tag1>中文</tag1><tag1>大學(xué)</tag1>" ],"content" : [ "武漢<tag1>中</tag1><tag1>文</tag1><tag1>大</tag1><tag1>學(xué)</tag1>" ]}}, {"_index" : "index","_type" : "fulltext","_id" : "3","_score" : 0.014395926,"_source": {"content":"武漢大學(xué)"} ,"highlight" : {"content.cn" : [ "武漢<tag1>大學(xué)</tag1>" ]}}, {"_index" : "index","_type" : "fulltext","_id" : "1","_score" : 0.009597284,"_source": {"content":"湖北工業(yè)大學(xué)"} ,"highlight" : {"content.cn" : [ "湖北工業(yè)<tag1>大學(xué)</tag1>" ]}}, {"_index" : "index","_type" : "fulltext","_id" : "2","_score" : 0.0077423635,"_source": {"content":"華中科技大學(xué)"} ,"highlight" : {"content.cn" : [ "華中科技<tag1>大學(xué)</tag1>" ]}}, {"_index" : "index","_type" : "fulltext","_id" : "4","_score" : 0.0061938907,"_source": {"content":"武漢理工大學(xué)"} ,"highlight" : {"content.cn" : [ "武漢理工<tag1>大學(xué)</tag1>" ]}} ]} }

搜索:gongyedaxue

{"took" : 105,"timed_out" : false,"_shards" : {"total" : 2,"successful" : 2,"failed" : 0},"hits" : {"total" : 1,"max_score" : 0.9900317,"hits" : [ {"_index" : "index","_type" : "fulltext","_id" : "1","_score" : 0.9900317,"_source": {"content":"湖北工業(yè)大學(xué)"} ,"highlight" : {"content" : [ "湖北<tag1>工</tag1><tag1>業(yè)</tag1><tag1>大</tag1><tag1>學(xué)</tag1>" ]}} ]} }

轉(zhuǎn)載于:https://www.cnblogs.com/chennanlcy/p/6591792.html

總結(jié)

以上是生活随笔為你收集整理的Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文、拼音、同义词搜索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。