`
pan_java
  • 浏览: 286142 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

solr技术文档

阅读更多
SOLR技术文档
1. 了解lucene 原理,全文搜索概念,参考(http://wishlife.iteye.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.iteye.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 asc
fl表示索引显示那些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. 总结
   以上是个人项目开发时的技术总结,如有错误请指出,与大家一齐分享成果是一件很开心的事.
                                    


   
    

         
        


       

分享到:
评论
8 楼 shijiyu1984 2009-11-05  
joujou 写道
谢谢回复。用lucene 查询时 说找不到指定文件 segments, index目录下有segments.gen 和 segments_1 这俩文件。

更新和提交都已成功。 返回结果
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">547</int></lst>
</response>

如果是延迟或者缓存问题  应该如何解决?


可能没有提交commit命令
7 楼 joujou 2009-06-22  
优化完了后 还是只有_2.xxx...文件 和segments.gen 和 segments_N 这两个文件。。。在 _2.fdt 文件中有新加入的信息, 但是还是查不出来。。。简直都无奈了。。
6 楼 pan_java 2009-06-22  
joujou 写道
谢谢回复。用lucene 查询时 说找不到指定文件 segments, index目录下有segments.gen 和 segments_1 这俩文件。

更新和提交都已成功。 返回结果
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">547</int></lst>
</response>

如果是延迟或者缓存问题  应该如何解决?

延迟  :等待
缓存  :使用不同的条件去查询,或重启solr server.
认真检查程序,经常一些错误是因为我们的程序有一些不起眼错误引起的.
优化一下solr 索引库再去 lucene 查询一下.
5 楼 joujou 2009-06-22  
谢谢回复。用lucene 查询时 说找不到指定文件 segments, index目录下有segments.gen 和 segments_1 这俩文件。

更新和提交都已成功。 返回结果
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">547</int></lst>
</response>

如果是延迟或者缓存问题  应该如何解决?
4 楼 pan_java 2009-06-22  
joujou 写道
为什么我 更新index,并 commit后 index目录里的文件有所变化(多了好几个文件出来) 但是查询结果却没有任何变化?


会不会是延时问题了,确认提交成功和更新成功了吗.有时还有缓存的问题.

最后直接用Lucene 本地查询一下!
3 楼 joujou 2009-06-22  
为什么我 更新index,并 commit后 index目录里的文件有所变化(多了好几个文件出来) 但是查询结果却没有任何变化?
2 楼 pan_java 2009-06-04  
ganqing1234 写道
“7. Solr相关命令”这节“发送到 http://localhost:8080/solr/update/ 用POST方式”,命令怎么执行?看不懂


利用apahce HttpClient包可以啊.
详细请见API

1 楼 ganqing1234 2009-06-03  
“7. Solr相关命令”这节“发送到 http://localhost:8080/solr/update/ 用POST方式”,命令怎么执行?看不懂

相关推荐

    solr技术文solr技术文

    在Solr技术文档中,我们可以深入学习以下几个关键知识点: 1. **索引构建**:索引是Solr的核心部分,它将原始数据转化为高效的搜索结构。索引过程中,Solr会解析输入文档,提取关键词,并建立倒排索引。倒排索引是...

    solr中文文档.pdf

    2. **全文搜索概念**:全文检索是指在系统存储的数据中提取任意内容,并根据用户提供的查询词,通过分析和匹配,找出用户所需要的文档或信息的技术过程。 3. **SOLR与Lucene的关系**:SOLR是基于Lucene的一个开源...

    solr部署技术文档

    solr是一个基于lucene的全文检索引擎。他包括了全文检索,命中高亮,准实时搜索,富文本检索等特性. Solr是用Java编写的,并作为一个独立的全文搜索服务器,比如tomcat容器内运行。Solr的全文索引和搜索其核心使用了...

    Solr文档打包下载.rar

     23_Solr技术文档.pdf  24_solr3.1 cookbook.pdf  25_Apache+Solr+3+Enterprise+Search+Server.pdf  26_apache-solr-beyond-the-box.pdf  27_Packtpub.Solr.1.4.Enterprise.Search.Server.Aug.2009.pdf

    solr7官方文档

    - "Solr 云" 描述了如何在 AWS EC2 等云平台上部署和运行 SolrCloud,这是构建可扩展搜索解决方案的关键技术。 - "升级 Solr 集群" 提供了升级 Solr 集群时的注意事项和步骤,确保在升级过程中数据安全和系统稳定性...

    solr7.5官方文档

    文档中提供了 Solr 搜索机制的总体概述,包括查询解析、评分算法等关键技术点。 #### Velocity 搜索 UI Velocity 搜索 UI 是 Solr 提供的一种可视化搜索界面,便于用户进行交互式搜索。 #### 相关性 文档中介绍...

    Solr 使用文档 pdf版

    - **官方文档**:最权威的技术文档和指南,适合深入学习。 - **论坛与邮件列表**:获取帮助、交流经验的主要渠道。 - **开源项目**:参与贡献代码,共同推动 Solr 的发展。 #### 八、总结 本手册为 Solr 3.* 版本...

    solr6.5英文版操作说明文档

    - **文档资料**:查阅详细的用户手册和技术文档。 - **示例代码**:学习实际应用案例中的 Solr 使用技巧。 通过以上概述,我们可以清晰地了解到 Solr 6.5 版本的操作说明文档涵盖了从安装部署到高级配置等多个方面...

    solr部署技术文档。

    【Solr部署技术文档】 Solr,全称Apache Solr,是基于Lucene的全文搜索引擎服务器,用于构建高效、可扩展的搜索应用。本技术文档将详细介绍Solr的索引和搜索过程,以及如何在Tomcat环境下搭建和配置Solr。 **一、...

    solr导航搜索工具+文档+配置代码

    3. 高性能:Solr利用倒排索引技术,实现了毫秒级别的搜索响应速度。 4. 多字段搜索:Solr支持对多个字段进行查询,并能进行复杂的查询语法,如布尔运算、短语匹配等。 5. 自定义排序和评分:用户可以根据需求定制...

    Solr文档.pdf

    安装后,Solr主要目录结构包括bin(运行脚本)、contrib(贡献插件)、dist(war和jar文件及相关依赖)、docs(API文档)、example(Solr工程的例子目录)、licenses(许可信息)等。Solr4.10.3要求使用1.7以上的JDK...

    solr开发详解

    - Solr 客户端(如浏览器或 Java 程序)通过 POST 请求向 Solr 服务端发送包含 Field 等信息的 XML 文档,Solr 通过解析这些文档来维护索引(增删改)。 - **搜索流程**: - Solr 客户端通过 GET 请求向 Solr ...

    solr技术分析及运用超详细教程

    solr技术分析及运用超详细教程solr开发指南,包括solr服务器搭建,新增数据库配置,配置增量更新,配置分词器,常见异常,删除默认字段,调试技巧,solr日志,,solr基本查询语法,solr多字段匹配,solri集成solr...

    solr技术总结

    ### Solr技术总结 #### 一、Solr概述与应用场景 **Solr** 是一个高度成熟且被广泛应用的全文搜索引擎,由Apache基金会维护。Solr是基于Lucene的,但相较于Lucene,它提供了更丰富的功能和服务接口。Solr不仅支持...

    Solr中文教程技术文档.docx

    索引过程中,Lucene 会将文本内容转换为倒排索引,以便快速查找包含特定词的文档。全文搜索的概念基于此,通过查询分析器处理用户输入,匹配索引中的关键词。 2. **了解 Solr**: Solr 在 Lucene 的基础上提供了...

    Apache Solr(solr-8.11.1.tgz)

    5. **docs 目录**:包含了Solr的文档,包括用户手册、API参考和教程,对于学习和调试Solr非常有用。 6. **server/solr 目录**:存储了配置集合的目录,每个集合都有自己的配置文件,如`schema.xml`用于定义字段和...

    solr7.5官方文档doc加pdf格式

    Solr7.5官方文档是学习和理解这个强大的搜索引擎的关键资源,包含详细的技术指南和最佳实践。这份文档以两种格式提供:PDF和DOC,方便不同用户的需求。 PDF(Portable Document Format)是一种通用的文件格式,易于...

    solr中文解析器以及使用文档

    "solr中文解析器以及使用文档"这个主题主要涵盖了Solr在处理中文内容时的关键技术和实践。 1. **中文分词**:中文文本不像英文那样以空格作为单词的分隔符,因此在索引和搜索时需要进行分词处理。IK Analyzer是一个...

Global site tag (gtag.js) - Google Analytics