精华内容
下载资源
问答
  • Solr搜索引擎原理

    万次阅读 2017-06-14 15:03:22
    场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到“坑爹”...这种搜索方法叫做顺序扫描法。对于少量的数据,使用顺序扫描是够用的。但是妈妈叫你查出坑爹的“坑”字在哪一页时,你要是从第一页的第一

    本文转载至:http://www.importnew.com/12707.html

    场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到“坑爹”所在的位置,此时你会怎么查呢?毫无疑问,你的眼睛会从38页的第一个字开始从头至尾地扫描,直到找到“坑爹”二字为止。这种搜索方法叫做顺序扫描法。对于少量的数据,使用顺序扫描是够用的。但是妈妈叫你查出坑爹的“坑”字在哪一页时,你要是从第一页的第一个字逐个的扫描下去,那你真的是被坑了。此时你就需要用到索引。索引记录了“坑”字在哪一页,你只需在索引中找到“坑”字,然后找到对应的页码,答案就出来了。因为在索引中查找“坑”字是非常快的,因为你知道它的偏旁,因此也就可迅速定位到这个字。

    那么新华字典的目录(索引表)是怎么编写而成的呢?首先对于新华字典这本书来说,除去目录后,这本书就是一堆没有结构的数据集。但是聪明的人类善于思考总结,发现每个字都会对应到一个页码,比如“坑”字就在第38页,“爹”字在第90页。于是他们就从中提取这些信息,构造成一个有结构的数据。类似数据库中的表结构:

    word    page_no
    ---------------
    坑        38
    爹        90
    ...       ...

    这样就形成了一个完整的目录(索引库),查找的时候就非常方便了。对于全文检索也是类似的原理,它可以归结为两个过程:1.索引创建(Indexing)2. 搜索索引(Search)。那么索引到底是如何创建的呢?索引里面存放的又是什么东西呢?搜索的的时候又是如何去查找索引的呢?带着这一系列问题继续往下看。

    索引

    Solr/Lucene采用的是一种反向索引,所谓反向索引:就是从关键字到文档的映射过程,保存这种映射这种信息的索引称为反向索引

    inverted_index_thumb.jpg

    • 左边保存的是字符串序列
    • 右边是字符串的文档(Document)编号链表,称为倒排表(Posting List)

    字段串列表和文档编号链表两者构成了一个字典。现在想搜索”lucene”,那么索引直接告诉我们,包含有”lucene”的文档有:2,3,10,35,92,而无需在整个文档库中逐个查找。如果是想搜既包含”lucene”又包含”solr”的文档,那么与之对应的两个倒排表去交集即可获得:3、10、35、92。

    索引创建

    假设有如下两个原始文档:
    文档一:Students should be allowed to go out with their friends, but not allowed to drink beer.
    文档二:My friend Jerry went to school to see his students but found them drunk which is not allowed.
    创建过程大概分为如下步骤:
    index-build

    一:把原始文档交给分词组件(Tokenizer)
    分词组件(Tokenizer)会做以下几件事情(这个过程称为:Tokenize),处理得到的结果是词汇单元(Token)

    1. 将文档分成一个一个单独的单词
    2. 去除标点符号
    3. 去除停词(stop word)
      • 所谓停词(Stop word)就是一种语言中没有具体含义,因而大多数情况下不会作为搜索的关键词,这样一来创建索引时能减少索引的大小。英语中停词(Stop word)如:”the”、”a”、”this”,中文有:”的,得”等。不同语种的分词组件(Tokenizer),都有自己的停词(stop word)集合。经过分词(Tokenizer)后得到的结果称为词汇单元(Token)。上例子中,便得到以下词汇单元(Token)
        "Students","allowed","go","their","friends","allowed","drink","beer","My","friend","Jerry","went","school","see","his","students","found","them","drunk","allowed"

    二:词汇单元(Token)传给语言处理组件(Linguistic Processor)
    语言处理组件(linguistic processor)主要是对得到的词元(Token)做一些语言相关的处理。对于英语,语言处理组件(Linguistic Processor)一般做以下几点:

    1. 变为小写(Lowercase)。
    2. 将单词缩减为词根形式,如”cars”到”car”等。这种操作称为:stemming。
    3. 将单词转变为词根形式,如”drove”到”drive”等。这种操作称为:lemmatization。

    语言处理组件(linguistic processor)处理得到的结果称为词(Term),例子中经过语言处理后得到的词(Term)如下:

    "student","allow","go","their","friend","allow","drink","beer","my","friend","jerry","go","school","see","his","student","find","them","drink","allow"。

    经过语言处理后,搜索drive时drove也能被搜索出来。Stemming 和 lemmatization的异同:

    • 相同之处:
      1. Stemming和lemmatization都要使词汇成为词根形式。
    • 两者的方式不同:
      1. Stemming采用的是”缩减”的方式:”cars”到”car”,”driving”到”drive”。
      2. Lemmatization采用的是”转变”的方式:”drove”到”drove”,”driving”到”drive”。
    • 两者的算法不同:
      1. Stemming主要是采取某种固定的算法来做这种缩减,如去除”s”,去除”ing”加”e”,将”ational”变为”ate”,将”tional”变为”tion”。
      2. Lemmatization主要是采用事先约定的格式保存某种字典中。比如字典中有”driving”到”drive”,”drove”到”drive”,”am, is, are”到”be”的映射,做转变时,按照字典中约定的方式转换就可以了。
      3. Stemming和lemmatization不是互斥关系,是有交集的,有的词利用这两种方式都能达到相同的转换。

    三:得到的词(Term)传递给索引组件(Indexer)

    1. 利用得到的词(Term)创建一个字典
      Term    Document ID
      student     1
      allow       1
      go          1
      their       1
      friend      1
      allow       1
      drink       1
      beer        1
      my          2
      friend      2
      jerry       2
      go          2
      school      2
      see         2
      his         2
      student     2
      find        2
      them        2
      drink       2
      allow       2
    2. 对字典按字母顺序排序:
      Term    Document ID
      allow       1
      allow       1
      allow       2
      beer        1
      drink       1
      drink       2
      find        2
      friend      1
      friend      2
      go          1
      go          2
      his         2
      jerry       2
      my          2
      school      2
      see         2
      student     1
      student     2
      their       1
      them        2
    3. 合并相同的词(Term)成为文档倒排(Posting List)链表postlist
      • Document Frequency:文档频次,表示多少文档出现过此词(Term)
      • Frequency:词频,表示某个文档中该词(Term)出现过几次

    对词(Term) “allow”来讲,总共有两篇文档包含此词(Term),词(Term)后面的文档链表总共有两个,第一个表示包含”allow”的第一篇文档,即1号文档,此文档中,”allow”出现了2次,第二个表示包含”allow”的第二个文档,是2号文档,此文档中,”allow”出现了1次

    至此索引创建完成,搜索”drive”时,”driving”,”drove”,”driven”也能够被搜到。因为在索引中,”driving”,”drove”,”driven”都会经过语言处理而变成”drive”,在搜索时,如果您输入”driving”,输入的查询语句同样经过分词组件和语言处理组件处理的步骤,变为查询”drive”,从而可以搜索到想要的文档。

    搜索步骤

    搜索”microsoft job”,用户的目的是希望在微软找一份工作,如果搜出来的结果是:”Microsoft does a good job at software industry…”,这就与用户的期望偏离太远了。如何进行合理有效的搜索,搜索出用户最想要得结果呢?搜索主要有如下步骤:

    一:对查询内容进行词法分析、语法分析、语言处理

    1. 词法分析:区分查询内容中单词和关键字,比如:english and janpan,”and”就是关键字,”english”和”janpan”是普通单词。
    2. 根据查询语法的语法规则形成一棵树
      grammer_tree.jpg
    3. 语言处理,和创建索引时处理方式是一样的。比如:leaned–>lean,driven–>drive

    二:搜索索引,得到符合语法树的文档集合
    三:根据查询语句与文档的相关性,对结果进行排序

    我们把查询语句也看作是一个文档,对文档与文档之间的相关性(relevance)进行打分(scoring),分数高比较越相关,排名就越靠前。当然还可以人工影响打分,比如百度搜索,就不一定完全按照相关性来排名的。

    如何评判文档之间的相关性?一个文档由多个(或者一个)词(Term)组成,比如:”solr”, “toturial”,不同的词可能重要性不一样,比如solr就比toturial重要,如果一个文档出现了10次toturial,但只出现了一次solr,而另一文档solr出现了4次,toturial出现一次,那么后者很有可能就是我们想要的搜的结果。这就引申出权重(Term weight)的概念。

    权重表示该词在文档中的重要程度,越重要的词当然权重越高,因此在计算文档相关性时影响力就更大。通过词之间的权重得到文档相关性的过程叫做空间向量模型算法(Vector Space Model)

    影响一个词在文档中的重要性主要有两个方面:

    • Term Frequencey(tf),Term在此文档中出现的频率,ft越大表示越重要
    • Document Frequency(df),表示有多少文档中出现过这个Trem,df越大表示越不重要
      物以希为贵,大家都有的东西,自然就不那么贵重了,只有你专有的东西表示这个东西很珍贵,权重的公式:

    空间向量模型

    文档中词的权重看作一个向量

    Document = {term1, term2, …… ,term N}
    Document Vector = {weight1, weight2, …… ,weight N}

    把欲要查询的语句看作一个简单的文档,也用向量表示:

    Query = {term1, term 2, …… , term N}
    Query Vector = {weight1, weight2, …… , weight N}

    把搜索出的文档向量及查询向量放入N维度的空间中,每个词表示一维:

    夹角越小,表示越相似,相关性越大

    参考:http://www.cnblogs.com/guochunguang/articles/3641008.html

    展开全文
  • Solr搜索引擎原理 solr建立在Lucene全文搜索引擎之上,搜索的原理就是Lucene的原理:反向索引(倒排索引),关键字到文档的映射过程。 搜索引擎关键技术:分词,把录入到搜索引擎的内容切分成有语义的词组,建立...

    Solr搜索引擎的原理

    solr建立在Lucene [ 路(第一声)森(第三声) ] 全文搜索引擎之上,搜索的原理就是Lucene的原理:反向索引(倒排索引),关键字到文档的映射过程。

    搜索引擎关键技术:分词,把录入到搜索引擎的内容切分成有语义的词组,建立索引,加快检索速度。简单来说:分词建词典,搜索查词典

    Solr有哪些域

    field(谐音:富有的)普通域:
    大多数情况下都是使用的这个普通域,主要定义了域名和域的类型

    copyField复制域:
    复制域中的source叫做源域,dedst代表目标域,在维护数据的时候,源域的内容会复制到目标域中

    dynamicField(呆纳米可 富有的)动态域:
    没有定义的全域名(定义了一部分,比如item_spec_*)模糊匹配到动态域

    uniqueKey主键域:
    主键域是必须存在的,默认域名就是id

    展开全文
  • Solr搜索引擎

    2018-04-25 15:28:38
    同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎Solr 提供了层面搜索(就是统计)、...

    Solr:

           Solr是一个高性能,采用Java5开发基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。Solr 包装并扩

    展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。

    此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。


    Lucene:

           Lucene是一款高性能的、可扩展的信息检索(IR)工具库。信息检索是指文档搜索、文档内信息搜索或者文档相关的元数据搜索等操作。Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。



    Solr和Lucene的区别:

            

    1.      Lucene本质上是搜索库,不是独立的应用程序,而Solr是。
    2.      Lucene专注于搜索底层的建设,而Solr专注于企业应用。
    3.      Lucene不负责支撑搜索服务所必须的管理,而Solr负责。

                                                                            solr运行原理

                  


          Solr采用分词来对关键字进行拆分并进行查询,通过创建core集合来存储数据内容。在solrj中有关于solr的一系列存取方法,可以通过solrj中提供的方法进行存取数据。

    展开全文
  • solr的原理、用途、简介啥的我就不说了,其他博客已经...这里先跟大家介绍一下再win下怎么安装solr搜索引擎。 1、下载solr 到apache的solr官网下载即可,附上链接-->#想下载就点我# 2、安装 win的安装很简单,解压

    solr的原理、用途、简介啥的我就不说了,其他博客已经写了很多。这里ImportNew有个solr系列的文章很好,安利一波-->##点我点我##

    很多初学者碰到的第一个头痛的问题,肯定是怎么成功安装并能使用。这里先跟大家介绍一下再win下怎么安装solr搜索引擎。

    1、下载solr

    到apache的solr官网下载即可,附上链接-->#想下载就点我#

    2、安装

    win的安装很简单,解压即可。

    3、启动

    由于solr自带jetty容器,如果不想结合tomcat,解压后直接启动就可以。

    为避免路径混淆,我们把solr解压之后的路径成为{SOLR_PATH_HOME}

    win打开cmd控制台,路径进入SOLR_PATH_HOME/bin。输入命令:solr start即可启动,默认的打开端口是8983,然后浏览器通过localhost:8983即可检测是否启动成功。如图:


    这里就可以进入admin的管理界面。


    是不是觉得炒鸡简单。但,这只是能跑起来,我们还需要使用它来搜索documents,而且这些document通常是我们自定义的结构。比如你想用它来实现图书馆的图书搜索,那每一本书的信息就是一个document。书的信息肯定得包括书名、作者、库存、ISBN、简介等等。而且每一本的信息需要你去上传到搜索引擎中,所以没有一点配置怎么说得过去。


    4、配置solrHome

    solrHome的概念这里就不展开了。简单来说他就是存具体document和索引的地方。

    编辑SOLR_PATH_HOME\server\solr-webapp\webapp\WEB-INF\web.xml文件。说明solrHome的路径,如下。

    <env-entry>
           <env-entry-name>solr/home</env-entry-name>
           <env-entry-value>{SOLR_PATH_HOME}\server\solr</env-entry-value>
           <env-entry-type>java.lang.String</env-entry-type>
        </env-entry>
    默认这个地方是被注释的。

    5、创建core

    一个solr可以支持建立多个库,比如你想搜索书籍,也行搜索手表。这时候可以新建两个core。

    SOLR_PATH_HOME\server\solr下新建文件夹,例如mycore1。

    SOLR_PATH_HOME\server\solr\configsets\_default\conf  整个文件夹拷贝一份到mycore1下,并在mycore1下新建文件件data。

    到admin管理页面,增加core。如下图:


    在这里配置基本的路径信息。


    6、在schema.xml中定义字段

    document的结构需要自己在schema中定义。

      <field name="bookinfo.author" type="text_en_splitting" indexed="true" stored="true"/>
      <field name="bookinfo.book_isbn" type="string" indexed="true" stored="true"/>
      <field name="bookinfo.book_name" type="string" indexed="true" stored="true"/>
      <field name="bookinfo.intro" type="text_en" indexed="true" stored="true"/>
      <field name="bookinfo.press" type="text_en" indexed="true" stored="true"/>
    这里推荐一篇别人的好blog#点我#
    另外,在管理页面也是可以添加Field/Dynamic Field/Copy Field。


    7、添加文档到solr

    在schema声明好我们的文档结构之后,就可以post文档到搜索引擎了(类似于数据库的insert)。先按照我们定义的结构构建一个测试document:

    <add>
        <doc>
            <field name="id">9787115283993_1</field>
            <field name="bookinfo.book_name">Node.js开发指南</field>
            <field name="bookinfo.book_isbn">9787115283993</field>
            <field name="bookinfo.author">郭家寶(BYVoid)</field>
            <field name="bookinfo.press">人民邮电出版社</field>
        </doc>
    </add>
    这里也推荐一遍好blog#点我#

    post文档有很多种方式,例如:

    1)使用SOLR_PATH_HOME\bin\post


    2)使用管理页面post



    8、查询

    使用管理界面可以轻松实现搜索查询


    q为搜索某个Field关键字。

    9、总结

    至此,可以在win上使用solr了。但是往往我们生产环境服务器都是部署在linux上,而提交document、查询搜索、更新等系列操作都是在程序中完成。所以本篇文章仅仅只是展示一下solr的基本用法。实际生产环境下篇文章再做详细介绍。

    展开全文
  • Solr5.5搜索引擎之分词原理说明.docx 介绍了Solr5.5内部使用的分词原理,有助于开发者自定义自己的分词器时掌握分词的基础知识。
  • 1. 积分商城现状 2. 搜索领域知识、原理、应用 3. Solr简介、部署及中文分词 4. SolrJ项目中应用 5. Solr分布式应用 6. 大型网站架构分析
  • Solr搜索引擎集成

    2019-01-31 15:58:23
    Lucene是一个完全用Java编写的高性能、跨平台的全文搜索引擎工具包,能满足几乎所有软件项目的搜索需求。Lucene是Apache基金会的顶级开源项目,官网:https://lucene.apache.org/,使用Lucene的方式主要有二种:一是...
  • 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索...
  • 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,...
  • 一.Analyser(分词器)  Solr官网:http://lucene.apache.org/ ...  docker中已经封装好solr. ...倒排索引的原理 文章表 文章id 文章标题 文章内容 1 我爱中国 中国地大物博 2 香港是中国一部分...
  • 1.技术选型,为什么用solr而不用lucene,或者其他检索工具 lucene:需要开发者自己维护索引文件,在多机环境中备份同步索引文件很是麻烦 Lucene本质上是搜索库,... 一句话概括Solr: Solr是Lucene面向企业搜索应用...
  • 这是一个基于Solr搜索引擎
  • webapps\solr\WEB-INF\lib"中,  将"ext_stopword.dic"、“IKAnalyzer.cfg.xml”、“mydict.dic”三个文件放入"webapps\solr\WEB-INF\classes"中 配置schema.xml文件: 将 &lt;...
  • 介绍了Solr5.5内部使用的分词原理,有助于开发者自定义自己的分词器时掌握分词的基础知识。
  • 文章目录单机安装windows下安装Linux下安装Solr目录说明启停控制脚本支持的命令 单机安装 Solr版本:7.5.0 下载地址:https://lucene.apache.org/solr/mirrors-solr-latest-redir.html windows下安装 第一步:安装...
  • 基于Solr搜索引擎研究与实现,讲述了solr技术的原理及其应用等等
  • Lucene全文检索框架+Solr搜索引擎(2018版.Java) 拥有10...
  • 1.Solr基本概念 Solr是一种开放源码的、基于Lucene的搜索服务器。...Solr全文检索基本原理: http://www.importnew.com/12707.html   为什么要用solr? 一般情况中的查询和搜索,我们直接查...
  • Lucene是一个开放源代码的全文检索引擎...提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎,是架构师技术!...
  • Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。Solr是一个高性能,采用Java开发, 基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的...
  • 基于Solr的搜索引擎架构;我对开源的理解;研究方向;关键字搜索;搜索引擎原理;介绍;看看的技术架构;Sphinx;简介;Solr和lucene区别;Solr;Solr;构建高可用的搜索引擎SolrCloud;SolrCloud;SolrCloud;SolrCloud
  • :如利用windows的搜索也可以搜索文件内容,Linux下的grep命令,再如用Google和百度可以搜索大量内容数据。 对非结构化数据也即对全文数据的搜索主要有两种方法: 一种是 顺序扫描法 (Serial Scanning): 所谓...
  • solr实现的原理

    2018-10-09 16:09:26
    用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。 要想知道solr的实现原理,首先得了解什么是全文检索,solr的索引创建...
  • Solr工作原理

    万次阅读 2018-07-13 14:56:19
    用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。要想知道solr的实现原理,首先得了解什么是全文检索,solr的索引创建过程...
  • 搜索引擎SOLR

    2018-01-16 09:42:35
    搜索引擎SOLR   1.Lucene的介绍 lucene是一款高性能的、可扩展,纯java语言编写的信息检索(IR)工具库。 它适合几乎任何需要全文本搜索(特别是跨平台)的应用程序。   官网:http://lucene.apache.org/java ...
  • 搜索引擎 Solr 简介

    千次阅读 2018-07-19 16:02:52
    在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索...
  • solr索引基本原理

    2019-12-14 12:07:00
    solr是一个全局检索引擎,能够快速地从大量的文本数据中选出你所需要的数据,而你只需要提供相应的关键词进行检索。solr的高效率查询靠的是底层强大的索引库,所以solr最关键的技术也是其底层的索引设计。solr工作的...
  • solr的基本原理

    2019-09-14 14:19:13
    solr是一个全局检索引擎,能够快速地从大量的文本数据中选出你所需要的数据,而你只需要提供相应的关键词进行检索。solr的高效率查询靠的是底层强大的索引库,所以solr最关键的技术也是其底层的索引设计。solr工作的...
  • lucene&solr原理分析

    2014-01-04 21:16:14
    lucene&solr原理分析,lucene搜索引擎solr搜索服务器原理分析。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,980
精华内容 2,792
关键字:

solr搜索引擎原理