elasticsearch中文搜索优化

遇到的问题

  1. 检索葡萄糖关键字,希望结果仅包含葡萄糖,不包含葡萄;检索葡萄,希望结果包含葡萄糖。
  2. 同义词如何配置
  3. 如何确保搜索关键词被正确分词

分析器分词流程

分析器扮演着非常重要的角色,ES提供的有内置的分析器,社区也提供各种分析器插件(如中文的ik分析器)。分析器由以下几个组件构成

  • 字符过滤器
    主要职责是在分词器前过滤字符流,在源字符流中添加、删除、替换字符。一个分析器中可以有0个或多个字符过滤器。主要包括:html char filter、mapping char filter等
  • 分词器
    主要职责是将接收到的字符流,按照某些规则切分成若干个“词”,并记录这些“词”在源字符串中的位置。分析器中有且只能有一个分词器。
  • 分词过滤器
    主要职责是将分好的“词”进行某种规则的过滤,可以添加、移除、替换“词”,但是不能修改“词”在源字符串中的相对位置。常用的分词过滤器包括:大小写转换过滤器、停用词过滤器、同义词过滤器、拼音过滤器

ik分词器

ik分词器介绍
优化规则:索引时,为了提供索引的覆盖范围,通常会采用ik_max_word分析器,会以最细粒度分词索引,搜索时为了提高搜索准确度,会采用ik_smart分析器,会以粗粒度分词。
mapping例子

    "arttitle": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_smart"
        }

这已经可以解决上述问题一,前提是葡萄和葡萄糖都是关键词。然而在人们日常的搜索需求中,很多短语是相连的,却并不在我们的关键词中,这里我们的解决办法是提供特殊查询接口:短语查询。

ik同义词

ik同义词配置

测试分词

直接指定分词器

POST _analyze
{
  "analyzer": "ik_max_word",
  "text":"你好世界"
}

指定索引中的字段

POST weipu/_analyze
{
  "field":"arttitle",
  "text":"hello world"
}

原文地址:https://www.cnblogs.com/zenan/p/11571212.html

时间: 2024-10-09 07:17:27

elasticsearch中文搜索优化的相关文章

Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)

一.先摆需求: 1.中文搜索.英文搜索.中英混搜   如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜   如:"nanjingdonglu","njdl","南京donglu","南京dl","nang南东路","njd路"等等组合 3.简繁搜索.特殊符号过滤搜索   如:"龍馬&quo

注册域名与SEO搜索优化

注册域名应该考虑哪些对SEO和网站运营影响 域名是互联网公司和个人网站的无形资产之一,网站的内容.流量都有域名有关系. 一个好的域名对SEO搜索引擎优化和网站运营都有一定的影响. 1.域名的后缀 一般情况下都注册.com 因为这个基本被认为顶级的域名,应该也是最有价值的域名. 但对于一些区域性和特定性.cn..net也是不错的选择. 可以参考:<域名后缀-SEO搜索引擎优化 > 2.域名中的关键词 注册的域名其实首先要考虑到的就是简单,容易记.有时我们也在考虑域名中的关键 词,但作为中文来说拼

elasticsearch中文分词(mmseg)——手动添加词典

elasticsearch本身的中文分词插件效果都不理想,手动添加词典可以在一定程度上进行弥补. 经过多次实验发现,mmseg的分词机制采用正向最长匹配算法,例如,针对"小时代"这个单词,其自带的词典中没有包含该词,故当用户搜索小时代时,检索不到任何结果. 在咸鱼老婆的虚心指导下,我终于找到了解决办法. 手动添加该词到mmseg的词库中,有两种方法: 1.将该词加入到自带的某个词典中(非停顿词词典),如words-my.dic. 2.新建一个自定义词典,将其放入默认词库文件夹下,注意编

solr中文搜索倒排索引和数据存储结构

作为搜索,我们传统的方式(正排索引)是从关键点出发,然后再通过关键点找到关键点代表的信息中能够满足搜索条件的特定信息,既通过KEY寻找VALUE.而Lucene的搜索则是采用了倒排索引的方式,即通过VALUE找KEY.而在中文全文搜索中VALUE就是我们要搜索的单词,存放所有单词的地方叫词典.KEY是文档标号列表(通过文档标号列表我们可以找到出现过要搜索单词VALUE的文档).正排索引从文档编号找词: 倒排索引是从词找文档编号: 当文档数据来临时,solr会首先对文档数据进行分词,创建索引库和文

helm-mode打开文件支持中文搜索

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami

Elasticsearch 中文分词(elasticsearch-analysis-ik) 安装

由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsearch上使用.当然前提是有elasticsearch的插件. 至于插件怎么开发,这里有一片文章介绍:http://log.medcl.net/item/2011/07/diving-into-elasticsearch-3-custom-analysis-plugin/暂时还没时间看,留在以后仔细研

如何解决Firefox浏览器地址栏中文搜索速度很慢

一.插件安装 之前使用Chrome浏览器,习惯在地址栏中直接进行中文搜索.转到Firefox之后,突然发现在地址栏进行中文搜索,访问速度会很慢. 可以使用插件解决这个问题:Omnibar 插件地址:https://addons.mozilla.org/zh-CN/firefox/addon/omnibar/ 二.添加搜索引擎 安装之后默认使用Google搜索,如图. 由于一些原因,Google搜索可能不能使用,所以这里要更改搜索引擎. 点击Google --> Manage Search Eng

【记忆化搜索+优化】10411 - SKAKAVAC

[记忆化搜索+优化]10411 - SKAKAVAC Time Limit: 4000MS Memory Limit: 36000KB 给定一个N-N的矩形,每个格子有一个数字,某人最初在R行C列的位置,他可以按以下规则移动: 1.跳到相邻的行,但列数差要大于1的所有格子.跳到相邻的列,位行数差要大于1的所有格子.即如果当前位置是(r1,c1)要跳到(r2,c2)则它们满足: |r1-r2|=1且|c1-c2|>1或者|c1-c2|=1且|r1-r2|>1 2.目标格子的数字严格大于起跳格子的

你的网站做好神马搜索优化了吗?神马搜索站长工具提交

神马搜索借助uc的优势,可直接在地址输入框中输入关键词就可以搜索了,免去了输网址的麻烦(这个在国外有点long duan的嫌疑).如果你的网站被bd等se收录了以后一般也是会被神马搜索收录的,查询方法也是用site:***.com.那么我们做好神马搜索优化呢? 既然神马搜索支持site指令,根据genfeng是思路,那它是不是也有站长工具平台呢?答案是有的,只不过得到这个结果稍微有点迂回.起初在网上搜索了相关问题都没找到,后面想想神马搜索是在uc上的,那在uc官网应该有一些提示.在uc社区的神马