设为首页 收藏本站
查看: 776|回复: 0

[经验分享] solr技术文档

[复制链接]

尚未签到

发表于 2016-12-14 10:00:42 | 显示全部楼层 |阅读模式
SOLR技术文档
1.了解lucene 原理,全文搜索概念,参考(http://wishlife.iyunv.com/category/30179) .建立自己的索引库.
2.了解solr参考(http://www.ibm.com/developerworks/cn/java/j-solr1/, http://www.ibm.com/developerworks/cn/java/j-solr2/).并下载实例程序.
3.搭建SOLR服务器
3.1官方下载 apache-solr-1.3.0.zip 和tomcat5.5
3.2将apache-solr-1.3.0\example\webapps\solr.war部署有 tomcat 下
3.3设置 solr 环境变量 apache-tomcat-5.5.26\conf\Catalina\localhost\下新建solr.xml文件内容如下:
        <?xml version="1.0" encoding="UTF-8"?>
<Context docBase="" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="e:/tomcat/solr" override="true" />
</Context>设置e:/tomcat/solr为solr主目录 ,建立文件夹.
3.4将apache-solr-1.3.0\example\solr 下所有文件复制到e:/tomcat/solr下
3.5启动 tomcat -> 浏览http://localhost:8080/solr/admin/ 能访问Solr Admin 页面说明Solr 服务器设置成功.
4.为Solr 创建索引库
4.1在 e:/tomcat/solr 目录下新建名为data 的文件夹,再在data 下新建index名为 文件夹
4.2将lucene 创建好的索引放入e:/tomcat/solr/data/index 下
5.Solr 索引设置
5.1在e:/tomcat/solr /conf 下solrconfig.xml, schema.xml <2>中的技术文档有详细说明
5.2中文支持,如果你的索引要支持中文搜索的话,在此推荐庖丁分词,参考(http://www.iyunv.com/topic/110148) schema.xml 设置如下:
中文词组分词
<fieldtype name="text" class="solr.TextField" positionIncrementGap="100">      
创建索引时            
<analyzer type="index">         
<tokenizer class="com.chuangs.fulltextsearch.analyzer.ChineseTokenizerFactory" mode="most-words"/>
</analyzer>
搜索时
<analyzer type="query">         
<tokenizer class="com.chuangs.fulltextsearch.analyzer.ChineseTokenizerFactory" mode="most-words"/>
</analyzer>
</fieldtype>
中文单词分词
<fieldtype name="word" class="solr.TextField" positionIncrementGap="100">      
<analyzer type="index">         
<tokenizer class="org.apache.solr.analysis.StandardTokenizerFactory"/>
</analyzer>
</fieldtype>
相关搜索field设置
词组
<field name="XXXX " type="text" indexed="true" stored="true" multiValued="true" omitNorms="true"/>
单词
<field name=" XXXX Word" type="word" indexed="true" stored="true" multiValued="true" omitNorms="true"/>注: com.fulltextsearch.analyzer.ChineseTokenizerFactory 是用solr 封装的庖丁分词,如下:
import java.io.Reader;
import java.util.Map;
import net.paoding.analysis.analyzer.PaodingTokenizer;
import net.paoding.analysis.analyzer.TokenCollector;
import net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector;
import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector;
import net.paoding.analysis.knife.PaodingMaker;
import org.apache.lucene.analysis.TokenStream;
import org.apache.solr.analysis.BaseTokenizerFactory;
public class ChineseTokenizerFactory extends BaseTokenizerFactory {
/**
* 最多切分 默认模式
*/
public static final String MOST_WORDS_MODE = "most-words";
/**
* 按最大切分
*/
public static final String MAX_WORD_LENGTH_MODE = "max-word-length";
private String mode = null;
public void setMode(String mode) {
if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode)
|| "default".equalsIgnoreCase(mode)) {
this.mode = MOST_WORDS_MODE;
} else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) {
this.mode = MAX_WORD_LENGTH_MODE;
} else {
throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode);
}
}
@Override
public void init(Map args) {
super.init(args);
setMode(args.get("mode").toString());
}
public TokenStream create(Reader input) {
return new PaodingTokenizer(input, PaodingMaker.make(),
createTokenCollector());
}
private TokenCollector createTokenCollector() {
if (MOST_WORDS_MODE.equals(mode))
return new MostWordsTokenCollector();
if (MAX_WORD_LENGTH_MODE.equals(mode))
return new MaxWordLengthTokenCollector();
throw new Error("never happened");
}
}   6 .Solr 搜索
     6.1 相关url 介绍
         http://localhost:8080/solr/ select/ 查询索引路径
         http://localhost:8080/solr/update/ 查询更新路径
     6.2 查询参数介绍
fl=*,score&q.op=AND&start=0&rows=16&hl=true&hl.fl=merHeading&hl.snippets=3&hl.simple.pre=<font color=red>&hl.simple.post=</font>&facet=true&facet.field=merCategory&q=+(merHeading%3A%E4%BD%A0%E5%A5%BD+AND+merHeadingWithWord%3A%E6%BD%98 )  +merActualendTime:[1239264030468 TO 1240473630468]&sort=merActualendTime ascfl表示索引显示那些field(*表示所有field, score 是solr 的一个匹配热度)
q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或)
start 开始返回条数
rows 返回多少条
hl 是否高亮
hl.fl 高亮field
hl.snippets 不太清楚(反正是设置高亮3就可以了)
hl.simple.pre 高亮前面的格式
hl.simple.post 高亮后面的格式
facet 是否启动统计
facet.field  统计field
q 查询语句(类似SQL) 相关详细的操作还需lucene 的query 语法
sort 排序
6.3中文搜索
中文搜索时必须要将中文URLEncoder.encode 用UTF-8, tomcat 还需设置URIEncoding="UTF-8" ,用GET方式发送请求.
如:merHeading%3A%E4%BD%A0%E5%A5%BD+AND+merHeadingWithWord%3A%E6%BD%98
我是要搜索 “你好 潘”  因为庖丁分词没有单词分词,当搜索中有单词是还需要使用另外的field ,所以在程序中要分解“你好 潘”成” 你好””潘”,然后”你好”用merHeading搜索, ”潘”用merHeadingWithWord搜索再取他们的并集(AND操作)
7.Solr相关命令
   7.1 新建和更新
        <add>
<doc><field name="id">1</field><field name="merHeading">你好潘修艳</field>
<field name="merHeadingWithWord">你好潘修艳</field>
</doc>
<doc>
<field name="id">2</field><field name="merHeading">你好潘修艳1</field>
<field name="merHeadingWithWord">你好潘修艳1</field>
</doc>
</add>新建和更新的文档格式一样,注 field有”&”字符用”&amp;”替换.
发送到 http://localhost:8080/solr/update/ 用POST方式
7.2 删除
  <delete><id>1</id><id>2</id>
  发送到 http://localhost:8080/solr/update/ 用POST方式
7.3 提交
  以上操作如果需要生效的需要提交命令<commit/>
  发送到 http://localhost:8080/solr/update/ 用POST方式
7.4 优化索引库
   <optimize/>
   发送到 http://localhost:8080/solr/update/ 用POST方式
8.总结
   以上是个人项目开发时的技术总结,如有错误请指出,与大家一齐分享成果是一件很开心的事.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314126-1-1.html 上篇帖子: jquery jsonp solr json 下篇帖子: [solr ,lucene 发音]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表