zoukankan      html  css  js  c++  java
  • 全文检索 -- Solr从概念到实战(一)

     

    全文检索:

    将整个文本进行“分词”处理,在索引库中为分词得到的每一个词都建立索引,和用户搜索的关键词进行匹配。实现快速查找效果。

    传统sql语句实现的局限性:

    select song_id,song_name,song_singer,song_album

    from table_song

    where song_name like “%神话%” or song_album like “%神话%” or song_lyric like “%神话%

    效率低,影响性能。

    数据库使用索引有无的区别:

    i. 不使用索引

    从字典中查“王”:从正文的第一页开始,逐页检查,看当前页中是否有“猪”这个字。要是没有再翻下一页。

    ii. 使用索引

    从字典中查“王”:先根据这个字的拼音或偏旁部首在“检字表”中找到这个字所在的页码,例如是857页,然后直接翻到857页,找到这个字。

    全文检索技术:

    Lucenesolr

    索引库的结构:

    索引库中的内容并不是一张完整的数据库表,因为有些内容在查询结果列表中不显示,所以不需要放在索引库中。

    字段域的创建:

    常用类型:

    1. IntField
    2. StringField
    3. TextField

    分词的概念

    把一句话/一篇文章拆分成一个一个单个的词,并在内部统计每个词出现的频率,以此为依据进行后续的查询搜索。

    Good morning lily

    [good]

    [morning]

    [lily]

    我爱炒鸡蛋

    []       []

    []       []

    []       [炒鸡蛋]

    [鸡蛋]

    不分词的例子:“地址”字段中的“深圳”数据就不需要分词。不分词的字符串类型就使用StringField,分词的字符串就使用TextField

    建立索引

    在索引库内部,将一个具体的索引值和文档中分词的结果关联起来,在搜索时使用索引可以快速定位到对应的词,进而快速定位到词所在的文档。

    只有需要和搜索关键词匹配的字段才需要建立索引。

    需要建立索引的字段例子:根据“神话”这个关键词搜索“song_name”字段中“神话”这条记录。

    不需要建立索引的字段的例子:图片的路径/aaa/bbb/ccc/pic10.png所在的picture_path字段不需要建立索引。

    字段的相关属性

    1. 数据类型:intdouble、字符串等等

    2. 是否分词

      1. 要分词:包含很多词的一句话
      2. 不分词:分词之后失去本来的含义
    3. 是否建立索引

      1. 要建立索引:用户会根据关键词搜索这个字段
      2. 不建立索引:用户不会根据关键词搜索这个字段
    4. 是否存储

      1. 要存储:在查询结果列表中要显示,或会用到

      2. 不存储:在查询结果列表中不显示也不会用到

  • 相关阅读:
    [两个数]最大公约(因)数和最小公倍数
    【curl】【php】curl报错,错误代码77,CURLE_SSL_CACERT_BADFILE (77)解决方法
    【杂项】【旅行】旅行必备
    【windows】【php】【nginx】windows 开机自启动nginx php 及nginx php配置
    【mysql】linux, mac mysql数据库root 密码忘记修改
    【mysql】 load local data infield 报错 ERROR 1148 (42000): The used command is not allowed with this MySQL version
    【mysql】配置 选项文件
    【发布相关】【心得体会】发布的注意事项-20180921
    【php】【运算符】位移运算符
    【php】运算符优先级界定
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/7639388.html
Copyright © 2011-2022 走看看