zoukankan      html  css  js  c++  java
  • 全文检索细说

    搜索方案,如何实现?采用什么技术和策略?

    全文检索思想

    全文搜索就是对文本数据的一种索引(分词索引,并非数据库索引)搜索方式。

    全文搜索特点,
    1.做相关度排序
    2.对文本中的关键字做高亮显示
    3.基于单词进行搜索
    4.只关注文本,不考虑语义

    使用场景,替换模糊查询。
    模糊查询缺点:查询速度慢,没有相关度排序,没有文本高亮显示,没有摘要截取,搜索效果不好。

    降低数据库压力,提高查询速度。

    全文搜索的核心
    1.创建索引(建立关键字与文本之间的关联关系。通过单词查询到句子对应的编号。)
    分词-->语法处理-->去重-->排序
    2.搜索索引
    输入关键字-->关键字分词-->搜索得到具体编号-->通过编号获取句子-->封装对象展示到前台

    全文检索的一种实现?Lucene

    Lucene是全文检索的一种实现,一堆jar包。

    中小应用:Lucene(也能使用ES)
    大型应用:Elastic Search,Sorl

    核心API
    索引库中
    增删改:IndexWriter
    查:IndexSearcher

    使用过程,下载,导入jar包,测试使用。

    看视频,看思想!

    Overview查看分词情况,Documents查看Doc记录,Search进行查询。

    索引目录(Directory)就是存储索引文件目录的对象,里面存放索引文件。

    底层的东西,是科学家研究的。有些算法,不是常人能看懂的。

    分词,包括中文分词,英文分词,中英文结合分词。
    一堆Api接口中,我们只需要自己需要的。
    有些老外写的玩意儿,不一定很友好。

    分词的时候,去除停止词,增加一些扩展词。
    可以控制力度。分词的大小。

    Document是一个动态列。一个Document对象可以随意的添加很多列。

    需要存,需要分词,需要索引,需要查询的(标题,摘要,产品名称)

    需要存,但不需要索引,不需要查询的(路径)

    需要存,不需要分词,需要查询的(ID,人名,地名)

    不需要存,需要分词,需要索引,需要查询(文章,大字段)

    是否存储,是否索引,是否分词。(ik分词器)

    Document随着数据库的改变而改变。一个Document对应一个文章或者商品信息(id,title,desc,属性,规格,分类等),或店铺信息。

    先思想,后实践,再解释。从了解,到入门,到精通。

    用的最多的是容错查询!模糊查询!

    ES(Elastic Search)全文检索服务器

    Lucene只能用Java,使用负杂。不支持集群环境(索引数据不同步)。
    这个时候ES就诞生了。
    大型项目都是需要集群的。

    ES,实时文件存储。
    可以扩展到上百台服务器,处理PB级结构化或非结构化数据。
    高度集成化的服务,可以通过RESTfulAPI,各种语言的客户端,甚至命令行与之交互。

    ES封装了Lucene,使用变得更简单。

    ES,都是http请求。Lucene都是调用API执行操作。

    ES使用案例(GitHub)

    重量级对手,Solr。

    服务端,客户端。RESTful。(图解,剖析架构),使用json作为数据交换格式。

    如何使用?

    1.安装ES服务端
    2.了解Restful风格
    3.选择图形界面客服端
    4.使用图形客户端向服务器发送各种命令
    5.使用java,php客户端语言操作ES服务器,增删改查

    依赖JDK1.7+

    图形界面访问9200端口,代码端访问9300端口。

    DSL查询与过滤

    由ES提供的丰富灵活的查询语言。

    DSL查询,DSL过滤。

    DSL过滤是精确查询。

    DSL查询是模糊查询。

    通过JSON来处理复杂的查询条件。

    理解知识体系,以后使用的时候,查询手册就可以了。

    分词器,需要通过插件进行集成。在服务器端进行集成。(IK分词器)

    文档映射机制用于进行字段类型确认(字段是什么类型,哪个分词器),将每个字段匹配为一种确定的数据类型。

    字符串,数字,日期,逻辑。

    对象类型,数组类型,地理位置。

    如果不指定类型,它会有自己默认的类型。

    自定义映射包括设置:
    1.类型
    2.是否可索引,可过滤
    3.权重
    4.格式
    5.长度,大于该值的字符串将不会被索引和存储
    6.是否将该值加到_all中
    7.是否存储
    8.索引方式,索引并分词,索引不分词,不索引
    9.索引分词器,索引创建时使用的分词器,ik_smart,ik_max_word,standard
    10.搜索分词器,搜索该字段的值时,传入的查询内容的分词器

    自定义高于全局,全局高于默认。

    最佳实践

    1.配置全局动态模板映射
    2.创建索引库
    3.配置字段映射
    4.创建、更新、删除文档
    5.搜索

    连接ES

    创建文档索引

    获取文档

    更新文档

  • 相关阅读:
    Linux-Zabbix 邮件报警设置
    CentOS6.7 防火墙规则(Iptables)
    CentOS7 防火墙规则 (firewalld)
    windows搭建代理服务器
    Linux服务器的远程IP限制
    利用shell脚本监控目录内文件改动
    CentOS 7, 升级python到3.x
    CentOS 7, Attempting to create directory /root/perl5
    变长参数表
    C语言预处理
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/9248410.html
Copyright © 2011-2022 走看看