Lucene和solr的一点理解
来源:互联网 发布:js遍历数组的方法 编辑:程序博客网 时间:2024/06/05 06:20
Lucene:全文检索引擎工具包,不能独立存在。
重要需要理解:索引域和文档域。
文档域可以理解为一条数据就为一个document,其中每一个字段就是一个field域
索引域:用于搜索,搜索程序将从索引域中搜索一个一个词,根据词找到对应的document。将Document中的Field的内容进行分词,将分好的词创建索引,索引=Field域名:词。
创建索引流程:
1、创建文档域,一个document可以添加多个TextField等其他类型的Field。Field有很多属性可以设置的。
2、分词:可以用标准的分词器,如StandardAnalyzer,IKAnalyzer(中文分词器,要配合IKAnalyzer.cfg.xml)。
3、创建IndexWriter并写到索引库,就是将document按照分词器去写到索引库(硬盘上的一个地址)
搜索索引流程:
1、创建QueryParser,指定field域名和分词器
2、创建query对象,如Query query = parser.parse("description:java AND c++");AND必须大写,类似于关键字
3、创建IndexSearcher,
File indexFile = new File("E:\\a\\b\\lucene\\");
Directory directory = FSDirectory.open(indexFile);
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
4、通过searcher来搜索索引库searcher.search(query, 5);显示5条
5、遍历结果,ScoreDoc[] scoreDocs = topDocs.scoreDocs;
---------------------------------------------------------------------------------------------------
Solr:基于Lucene的全文搜索服务器,可以独立运行,把war包放到tomcat就可以运行了。
Solr解决了web应用直接与document交互,而是让solr服务器与document交互。
solr服务的配置很重要!
1、创建一个solrhome文件夹,可以从下载的zip中拷贝collection1到home下,其中collection1又被称为solrcore。一个home下可以有多个solrcore,每个solrcore实例提供单独的搜索和索引服务。
2、将contrib和dist拷贝到solrhome外面一层的文件夹
3、配置solrconfig.xml,该文件在collection1的conf下,主要关注lib标签,把目录改成现在的。
4、配置schema.xml,必须先定义你需要的field和fieldType。比如:
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
<!-- 目标域 -->
<field name="product_keywords" type="text_ik" indexed="true" stored="true" multiValued="true"/> 这个就是当你用product_keywords域时,里面的内容会在product_name和product_description两个实际的域中去找。
<copyField source="product_name" dest="product_keywords" />
<copyField source="product_description" dest="product_keywords" />
5、将solr.war放到tomcat下解压,在lib中添加额外的jar包(zip中example\lib\ext中),将example\resources中的log4j拷贝到WEB-INF的classes下。
6、修改web.xml,添加
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>E:\solr\solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
7、启动tomcat,localhost:8080/solr访问,提供一个可视化界面。
使用:
在数据库中建表,并填写数据,然后通过Dataimport插件生成索引文件
1、将dist下的solr-dataimporthandler-4.10.3.jar拷贝到contrib\dataimporthandler下,
修改solrconfig.xml文件,添加lib标签
<lib dir="${solr.install.dir:../..}/contrib/dataimporthandler/lib"regex=".*\.jar" />
2、在contrib下创建db文件夹,放mysql的连接jar。
修改solrconfig.xml文件,添加lib标签
<lib dir="${solr.install.dir:../..}/contrib/db/lib"regex=".*\.jar" />
3、创建data-config.xml,放到solrconfig.xml同目录
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.48.131:3306/solr"
user="root"
password="root"/>
<document>
<entity name="product" query="SELECT name,description FROM products ">
<field column="name" name="product_name"/> //要与schema.xml中的field对应
<field column="description" name="product_description"/>
</entity>
</document>
</dataConfig>
4、重启tomcat,在管理界面的dataimport下execute一把,就会生成索引文件。
--------------------------------------------------------------------------------------------------------
使用solr-solrj做开发,需要httpclient的支持,步骤还lucene差不多,就是api不一样,大致就是创建查询条件,HttpSolrServer去做query方法,然后封装结果。
下面是配置HttpSolrServer的bean。
<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-arg value="http://localhost:8080/solr/"></constructor-arg>
</bean>
一些复杂查询是常用的,比如
query.setQuery(queryString);和query.set("df", "product_name");连用就表示默认查询的域时product_name。其中df是固定的
另外比如query.addFilterQuery("product_price: [1 TO 100]");表示添加过滤条件,可追加。比如query.addFilterQuery("product_catalog_name:" + cataName);按类目过滤。
query.setSort("product_price", ORDER.desc);还能设置排序。
这个过程就类似于某网上商城搜索栏搜索,会把符合条件的都查出来。然后再选择价格以及类目进行过滤。
这里分享一个返回页数的好方法:
int pageCount = (int) (totalCount / pageSize);
if ((totalCount % pageSize) > 0) {
pageCount++;
}
- Lucene和solr的一点理解
- solr/lucene和nutch/lucene的区别
- Solr和Lucene的关系
- Lucene和Solr的区别
- lucene和solr的区别
- solr解析和lucene的区别;
- Lucene和solr
- Solr和Lucene
- lucene/solr的缺点
- 【Lucene&&Solr】Lucene索引和搜索流程
- Lucene和Solr 学习目录
- Lucene和Solr 学习目录
- Lucene和Solr 学习目录
- Lucene和Solr 学习目录
- Lucene和Solr 学习目录
- Lucene和Solr 学习目录
- lucene nutch solr及hadoop的区别和联系
- 基于Lucene的全文检索 solr 简介和搭建
- 最简便打开相册方法
- GBDT理解二三事
- 弹出对话框之Dialog,你一定不知道这些
- excel表格生成sql语句
- 我所理解的 SVM核函数的应用
- Lucene和solr的一点理解
- 初涉MYSQL
- 从修改.cshrc导致无法进入用户到删库跑路
- 169. Majority Element(java)待续。。。
- hdu4348 To the moon 区间更新
- 2.浅谈HTTP中Get与Post的区别
- 2017 Multi-University Training Contest
- Lambda Probe配置说明,受够了网上全部是转发的(详细)
- android开发之progressbar刷新进度