Elasticsearch服务器 更好的搜索笔记
2016-01-11 23:16
190 查看
5.1 lucene评分简介
简介lucene的评分体系tf/itf5.1.1当文档被匹配时
介绍lucene中文档被匹配的一些因素5.1.2默认评分公式
介绍lucene打分的公式5.1.3相关性的意义
lucene的打分机制不是万能的,需要根据自己的需求去具体的打分,排序
5.2 elasticsearch的脚本功能
脚本的相关属性script包含实际的脚本代码;lang定义了提供脚本语言信息的字段,默认为mvel,params此对象包含参数及其值5.2.1 脚本执行过程中可用的对象
不同的阶段使用的对象是不同的,如在搜索阶段对象是_doc,_source等;一个字段可以作为_source文档的一部分存储;一个存储未经解析的值;一个解析成若干标记的值
5.2.2 MVEL
如果没有明确说明默认使用5.2.3使用其他语言
也可以使用js,python等,但是必须安装插件5.2.4 使用自定义脚本库
脚本应该放在config/scripts目录中,并且声明名字,在dsl中使用如果不喜欢脚本,允许使用java类
1、工厂实现类
必须实现org.elasticsearch.script.NativeScriptFactory类,该类强制实现newScript()方法2、实现本地脚本
可以实现脚本来截取特定的字段,进行处理,例如在此处对一个field里面的字段进行hascode,并且排序,相当于实现了一个ES所定义的接口,用自己的程序,这块应该可以做展示方面的工作?感觉可以用得到
3、安装脚本
将写的脚本封装成JAR归档,放在lib目录下,并且在elasticsearch.yml配置文件添加一行4、执行脚本
发送dsl语言查询,如果顺利就可以看到按照我们所规定的逻辑排序的展示5.3 搜索不同语言的内容
关于多语言数据的处理方法5.3.1 区分处理不同语言
要选择合适的算法来处理语言,针对不同的语言,所使用的处理不一样,例如空白分词器等5.3.2多语言处理
大约有三种方法:不同语言存储成不同的类型不同语言的文档存储到单独的索引中
对单一文档字段存储成多个版本,每个版本包含不同的语言
重点在不同的语言存储在单个索引中的方式
5.3.3 检测文档的语言
可以使用apache tika以及java的language detection来进行检测5.3.4 示例文档
给出一个文档例子,有title,content,lang等字段,可用lang字段选择对应的分词器5.3.5 映射文件
对于上述的文档给出一个mapping,如果知道指定的语言时候,进行用lang指定的分析器,如果不知道的话,用default默认的simple分词器,这个小结可以学习如何给定两个分词器,一个是默认的,一个是根据规定语言所动态指定的分词器,可能有用
5.3.6 查询
1、用已知语言查询,例如documents为复数,用英语的话,会自动变为单数来查询,因为english分词器可以识别2、使用默认的时候,无法区分是复数,返回无结果
3、使用组合查询,使用两个都有,如果已知语言,以及不知道语言都给出结果,组合查询
5.4 使用查询加权影响得分
使我们更重要的字段排序更靠前5.4.1 加权
加权可以在两部分,一部分是query一部分是field,总共这两部分5.4.2 为查询添加加权
对于一个query查询,可以在语言里指定哪一个字段有更重的权重,即哪一个fields更重要,分别是5.4.3 修改得分
1、constant_score查询
允许对任何过滤器或者查询明确设置一个被用作得分的值2、加权查询
允许定义一个查询额外部分,降低匹配,给出例子,查询的时候remarque的书得分降低10倍3、function_score查询
比之前的复杂,在得分计算成本高昂时有用,因为它将计算过滤后文档的得分查询结构里有query,fielter,function,boost_mode,score_mode,max_boost,boost等参数
背后的逻辑是,函数匹配文档,并基于score_mode参数计算得分,然后文档查询得分由函数计算所得分数结合而成,结合时基于boost_mode
boost_mode:允许定义如何将函数查询计算分数与查询分数结合
score_mode:定义函数计算分数是如何结合到一起的
boost_factor函数:允许把文档分数乘以一个给定的值
script_score函数:允许使用脚本来计算得分
random_score函数:通过seed值生成一个为随机分数
decay函数:之前的函数随着距离变大而贬低,该函数不同,距离基于一个单值的数值型字段
假设一个point字段,存储位置信息,希望得分收到用户所在位置的距离影响如为(52,21)原点,当每大于1km那么得分衰减10%,这个例子
对于距离的时候有可能能用到
4、弃用查询
之前用的一些查询,但是新版本已经不用的一些查询有custom_boost_factor查询,custom_score查询,custom_filters_score查询,都可以用function_score查询来表达代替
5.5 索引是加权何时有意义
获得独立查询的加权,重建索引需要,加权值变化时,也要重建索引,如果把omit_norms设置为true时,就不能使用索引时加权5.5.1 输入数据中定义字段加权
给出输入数据时如何进行加权,对应字段需要有加权值,此处并不是在mapping的时候定义的加权值5.5.2 在映射时候定义加权
在映射的时候给出每个字段的boost值,对于搜索这个可能更有用,毕竟用户本身不知道哪一个字段是更加的重要的5.6 同义词
就是使用同义词,使搜索的时候可以搜出来5.6.1 同义词过滤器
给出一个具体的同义词过滤器的dsl结构,给出完整的构造,并且有同义词映射;如果不想要写在dsl中,也可以使用文件,从文件得出同义词映射5.6.2 定义同义词规则
如何定义那些是同义词的1、使用solr同义词
显示同义词,即类似was,star wars=>starwars等效同义词,was,star wars,starwars这四个是等效的
扩展同义词,one,two,three=>one,two,three
5.7 理解解释信息
查看为什么有的排前,有的排在后面,即看懂explain解析信息5.7.1 理解字段分析
看懂如何查看一个query如何被分词的,有具体的curl语句,可以查看5.7.2 解释查询
解释一个文档是如何被打分的,每一部分的分是多少,即explain信息本章节主要介绍如何使搜索结果更加的复合我们想要的结果,比如排序等方面
相关文章推荐
- 所谓文明
- SpringMVC返回json数据的三种方式
- 点击区域外隐藏该区域,event.stopPropagation()
- 线程的几种状态
- Android Handler详细使用方法实例
- linux中select()函数分析
- 《计算机科学导论》 文件结构基础知识
- ThreadLocal小结
- Dom4j和Xpath
- 聚合函数与分组
- 笔记:《高效能人士的七个习惯》第五章 习惯三 要事第一——自我管理的原则
- iOS开发 ----- webView和JS的简单交互
- HttpClient4.3 关于https 中SSL证书请求问题
- 服务器端启动AVD(Android Virtual Device)
- Hadoop手动升级HA配置手册
- 在Eclipse中导入SVN库里的Maven项目
- Sublime text设置自动换行
- CCSpriteFrameCache精灵帧缓存分析
- 百度云盘构建svn服务器
- android 获得各个应用程序缓存大小和清除全部应用缓存