项目里 基于solr搜索服务的认识

第九天的总结:
项目开发到第九天的时候 要完成项目的 一个 重要的 搜索的功能 我要做的是一个 搜索 模块
说到搜索的功能 的 往往 是一件在开发里比较费力的 的事情 传统的开发里 会在随着 网络在生活里的大大的普及
我们更加依赖网络带给我们的服务:这样 在服务器的承载 方面 消耗量过大 就会 状态不稳定
平常的搜索 比如 在百度的 日常搜索的 (有事问度娘)推荐 信息:方便带给我们工作与生活的便利,
百度之所以这么的强大, 是基于 他有强大的搜索的功能 (以上为;自写总结)用时12分钟 的 表述酝酿)
(官方原文)大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗
并且它们由于沉重的数据库加载而拖垮你的应用的性能。
这就是为什么转移负载到一个外部的搜索服务器是一个不错的主意,Apache Solr是一
个流行的开源搜索服务器,它通过使用类似REST的HTTP API,这就确保你能从几乎任何编
程语言来使用solr。

  -------=========******** 当前 包里 的 solr 内容:*******==========-------

apache-tomcat-solr :----- tomcat 服务器:
solr-4.10.3:-----官方下载 的
solrhome:------存储空间
----中文分词器 的插件-------
-========= IK Analyzer 简介:IK 实现了简单的分词歧义排除算法,词典分词 与 模拟语义分词
IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包
IK Analyzer 2012FF_hf1 – 里的 – IKAnalyzer2012FF_u1.jar
=-:在服务器 运行空间里 要配置的文件:=== 让你可以很好的找到 这些资源
apache-tomcat-solr\webapps\solr\WEB-INF\classes:

后缀名为dic的文件就是 词典类型 : 都可以打来进行编辑

  ext_stopword.dic :  停用词 词典 :规避的词, 英译 stopword停用词 省略词 禁用词 (输入这些字词 是没结果 的)
IKAnalyzer.cfg.xml : 配置文件  : 关联 与配置 这上下的2个  词典的  进行的是改名与位置 
        mydict.dic :   扩展词典 :  

=====: IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> IK Analyzer 扩展配置 mydict.dic;
 <!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopword.dic</entry> 

=******* solrhome 的 schema.xml 文件,配置 ******=------------
–======== 1:配置 中文 解析器:IKAnalyzer
–======== 2: 配置 域
修改 solrhome 的 schema.xml 文件,配置一个 FieldType,使用 IKAnalyzer

我自己当前:solrhemo\collection1\conf 里的schema.xml 编辑: 到最后 里加上

基本的类型
—这里指定的 分析器 就是我们copy的jar 包里 放到里lib
–这个对应 --------就是添加到 tomcat 服务器 里 webapps 里 solr里 WEN-INF 里 lib 里-------IKAnalyzer2012FF_u1.jar 包 里的一个类

=====: 这是定义字段的类型 : 自定义的 :fieldType 标签里的 name=“text_ik”
: 如此这样 就完成了: 中文编辑器的定义 : 所有的逻辑都在依据 IKAnalyzer 进行了******

      **** 启动solr服务器 **** &&&&&&=========-------------

保存所添加的 开始重新启动 :apache-tomcat-solr\bin 点击 里的 startup.bat : 开启solr 服务器
----: 在浏览器里 输入:http://localhost:8080/solr


在浏览器里开始 用 (刷新一下 ) 在Analyse Fieldname / FieldType: 找到是我的定义 text_ik :就是刚才<fieldType name=“text_ik”

 -------=========: 示例 继续的进行中-----------。。。。。。。


在浏览器里开始 用 (刷新一下 ) 在Analyse Fieldname / FieldType: 找到是我的定义 text_ik :就是刚才<fieldType name=“text_ik”
要写在后面的里的原因是 很多的 的 前面都是 这些 字段类型

Test :------ http://localhost:8080/solr
Analyse Fieldname / FieldType:
text_ik
--------------下拉框的内容:(部分) -------
root
version
author
cat
category
comments
content
content_type
description
features
id
inStock
includes
keywords
last_modified
links
manu
manu_exact
name
payloads
popularity
price
resourcename
sku
store
subject
text
text_rev
title
url
weight
_bbox_coord
alphaOnlySort
ancestor_path
bbox
binary
boolean
currency
date
descendent_path
double
float
ignored
int
location
location_rpt
long
lowercase
managed_en
payloads
phonetic
point
random
string
tdate
tdouble
text_es
text_hi
text_hu
text_hy
text_id
text_ik =============这是 我们的自定义的
text_it
text_ja

: 输入的: 封红卫简单点
解析的格式是:
在这里插入图片描述

基于项目 搜索 查询 的 demo:
开始上搜索 的 罗列 都要的是那些 ==== 是否 需要查询的那些
id :SKU Y
title:标题 Y
price :价格 Y
image: 图片地址 N
brand: 品牌 Y
seller :商家名称 Y
category:商品分类:Y
goodsId : SPU 要存入的 低级要进入的具体的信息额就是 SPU
的信息 : 因为 整个 页面就是SPU 的
定义的时候加就一个 item_ 通过 加前缀 以避免重复 的
(使用之前的,还很麻烦 , 要找 的)
自web.xml: 里进行 配置 的

 ======****** 继续在 :solrhemo\collection1\conf\schema.xml: 里  配置  域

-----=====:$$ 确定一个域 的时候 要考虑的 : 分词 搜索的词 $$ ======-------
– 常规用的 就是: name type indexed stored

-----====solr Tomcat服务器里 solrhemo\collection1\conf\schema.xml:------- 编写的----- schema: 模式

<field name="item_goodsid"type="long" indexed="true" stored="true"/>
<field name="item_title"type="text_ik" indexed="true" stored="true"/>
<field name="item_price"type="double" indexed="true" stored="true"/>
<field name="item_image"type="String" indexed="false" stored="true"/>
<field name="item_brand"type="String" indexed="true" stored="true"/>
<field name="item_seller"type="text_ik" indexed="true" stored="true"/>
<field name="item_category"type="String" indexed="true" stored="true"/>

-------------------------------- 重新 的复制的 -------

<field name="item_goodsid" type="long" indexed="true" stored="true"/>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="double" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category" type="string" indexed="true" stored="true" />
<field name="item_seller" type="text_ik" indexed="true" stored="true" />
<field name="item_brand" type="string" indexed="true" stored="true" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>


---------=* 复制域的*===------- 关联 的作用 将
需求: 上面的关键字的 是什么:多条件 查询:或者的是分类 或者是标题
事先配好了 :
分两步 :
1: 定义复制域
<field name=“item_keywords” type=“text_ik” indexed="true” stored:=“false”multiValued=“true”/>
stored:=“false”只对这一个域进行的 : 无需 物理存储 不占存储空间
multiValued=“true”:肯定是多个 将多个 指向此复制域
2: 将要复制的与 指定到 复制的域 里
< copyField source=“” dest=“item_keywords”/>
copyField source=“”:不同的要被复制的资源 dest=“”就是 复制域的name值 dest目的 对象
知识逻辑理论上的复制 而不是物理的上的 复制
完成的实例;

--------=**** 动态域 :****=------

今天 主要用的是 普通域 就是数据库里的 字段
配置字段的 ,

域 的name域 名 type 类型 stored:

indexed L是否建立 索引 : 当要建立搜索的时候就会 ,
比如 具体商品 所要的 搜索 true :, 而类似与图片地址的 就是 failse(因为这些 数据存在只是为了搜索))
当然也可以指定为 刚才 的 , 要搜索 与 复赋值域 : 来源于其他的域
String在 这里的 配置的 类型 ctrl+F 查找的是 ;
也就是在这里的 配置的,才会在 这里 出现
别的配好的并不是我们需要的 , 所以 就是自己配的 ===自定义域

完全的是一个不固定的 : 很灵活的 — 对应关系型数据库 ====解决的是规格的问题 7

配置 的是: dynamic :n. 动态;动力
<dynamicField name=“item_spec_*” type=“string” indexed=“true” stored=“true”
主要配置的是: 前半部的就可以固定 的 后面的就是随意的非固定的
=====特点就在 前半部:dynamicField name=“item_spec_*” : dynamicFiled name值的 * 号 后缀

Test :------ 保存本重新启动的之后 浏览器里 : 输入: http://localhost:8080/solr
在项目里 的 源码图片
在这里搜索 字词: 电视
已搜索的 开发版 法人 示例 图片(
要写在后面的里的原因是 很多的 的 前面都是 这些 字段类型
18:04 2019/1/16: 封红卫:

猜你喜欢

转载自blog.csdn.net/qq_41934719/article/details/86529564