环境:window7+solr6.5.1
0 启动solr
0.1 通过实现配置好的techproducts示例内核启动Solr搜索服务器:
bin\solr -e techproducts
0.2 解释过程
输入命令之后,先执行的是启动Solr服务器
没有techproducts项目,新建techproducts
post数据,向techproducts上传14个示例文件
1 理解索引
1.1 定位techproducts所在目录
F:\solr-6.3.0\solr-6.3.0\example\techproducts
打开该目录,该目录下还有两个子文件夹:logs和solr,logs用来记载内核运行的日志,solr是内核的核心,一切操作都将在这里进行。
1.2 定位techproducts索引数据位置
F:\solr-6.3.0\solr-6.3.0\example\techproducts\solr\techproducts\data
1.3 下载索引数据到本地
由于我是在本地搭建的环境,所以索引数据就存储在本地,无需再下载。
1.4 使用Luke查看索引数据
- 1.4.1 打开Luke窗口
双击luke-6.3.0目录下的luke.bat文件,也可以通过命令行运行,先进入luke所在目录,再输入如下命令:
java -jar luke-with deps.jar
- 1.4.2 打开techproducts的索引数据
在上图的path中输入techproducts的索引库目录,就可以索引数据。
overview选项卡:用来进行索引的一般性查看和操作的,比如索引目录名,索引文件版本。。。等等概要信息,右上角三个按钮分别可以重新打开索引,提交索引更改和关闭当前打开的索引,下面两个list显示词和字段的相关信息。有时一个关键词,对应于多个文档,所以文档数要多于关键字数目。
Documents选项卡:用来进行文档的操作和查看的,比如文件的删除、添加。下面一个大listview就可以用来查看文档的详细信息。通过Document标签可以查看各个Term,点击show All,会进入search页面,显示使用term查询,匹配的所有记录。 这里的term就相当于查询关键字。Term对应的各个文档,这里也可以show all,这会跳转到Search标签,也可以点击Show Position显示文档的位置信息。 这里的term frequency是指 term在文档中的出现次数。只有Show all,才会触发Search,并跳转到Search标签。
Search选项卡:在这里进行索引的搜索测试,可以编写lucene搜索语句,然后可以看到语句解析后的query树,这样就可以知道为什么有些查询会查询不到想要的信息,然后还可以选择进行搜索的分词器、默认字段和重复搜索次数的(可以通过多次搜索来获取平均一个搜索过程的耗时长短,这个对查询的性能测试时非常有用的),然后下面的listview中就会列出一个搜索的的文档的所有保存的(store)字段的值,下面可以看到查询花费的时间。在Search标签页里,点击Explain structure,可以看到对查询字符串的分词结果。(在查询输入框)更新查询字符串之后,需要点击update,才会更新下面的字符。
Commits选项卡:用来查看每个索引相关文件的一些属性的界面,具体的话,可以通过这个界面分析下索引文件的多少,是否需要优化或者合并等等。
Plugins选项卡:可以看到luke提供的各种插件,我认为比较有用的还是那个分词工具,提供一个分词的类,然后下面文本框输入一段文本,然后就可以让这个工具帮你分词,你可以看到详细的分词信息。然后还有一个Hadoop插件,支持从hadoop节点中获取节点中文件的相关信息。Analyzer Tool,可以使用这个测试Analyzer的工具。
总而言之,Luke是一个用于Lucene搜索引擎的,方便开发和诊断的第三方工具,它可以访问现有Lucene的索引,并允许用户显示和修改。 - 1.4.3 search使用
由上图可以看到,第一条搜索结果的score得分为1.4344.
1.5了解schema
1.5.1 定位 techproducts 的 schema 信息(managed-schema 文件),对照之前的索引情况,解读其 schema 内容
在techproducts的managed-shema中,定义了所需数据的所有字段,并对这些字段进行了设置,常用的几个设置如下:
- type 分词器选择
- indexed 该字段是否可以检索
- stored 该字段是否需要存储
- multiValued 该字段的取值是否唯一
1.5.2 定位 techproducts 的被索引文档(原始文档),对照索引和 schema 情况,分析多个原始文档的内容构成
被索引文档中的字段在shema中都有定义,solr通过根据定义字段时的设置,选择对应的分词器对该字段进行分词,然后再对用户输入的词进行分词,两者相互匹配,得出索引结果。
2 掌握Query查询构造#####
查询请求:
查询结果:
查询请求:
查询结果:
查询请求:
查询结果:
这没啥可说的,主要是了解对field范围的限定。
查询请求:
查询结果:
查询请求:
查询结果:
查询请求:
查询结果: