- 浏览: 755377 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lgh1992314:
a offset: 26b offset: 24c offse ...
java jvm字节占用空间分析 -
ls0609:
语音实现在线听书http://blog.csdn.net/ls ...
Android 语音输入API使用 -
wangli61289:
http://viralpatel-net-tutorials ...
Android 语音输入API使用 -
zxjlwt:
学习了素人派http://surenpi.com
velocity宏加载顺序 -
tt5753:
谢啦........
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
lucene插入document建立索引代码
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.util.Version; public class DocInsert { private static IndexWriter indexwrite = null; static{ Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); // Store the index in memory: // Directory directory = new RAMDirectory(); // To store an index on disk, use this instead: try { Directory directory = FSDirectory.open(new File("E:\\output\\lucence\\index")); indexwrite = new IndexWriter(directory, analyzer, true, new IndexWriter.MaxFieldLength(25000)); } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (LockObtainFailedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void createDoc() throws CorruptIndexException, IOException{ List<String> datalist = org.apache.commons.io.IOUtils.readLines(new InputStreamReader(new FileInputStream(new File("E:\\output\\lucence\\data\\data.txt")),"GBK")); for(String str:datalist){ Document doc = new Document(); String[] text = str.split("\t"); if(text.length < 2){ continue; } doc.add(new Field("context", text[1], Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("id", text[0], Field.Store.YES, Field.Index.ANALYZED)); indexwrite.addDocument(doc); } } public static void main(String[] args) throws CorruptIndexException, IOException { createDoc(); indexwrite.commit(); indexwrite.close(); } }
数据格式为:
4915779 球泡灯套件
4915777 15018506651求购三星i559 i569 i579 4915775 采购雪纺格子印花面料 4915773 汽泡信封袋 4915771 电泳加工 4915769 6405 2RS 4915767 蓝色丁腈手套 4915765 采购求购KO3-15T八角 4915763 胸杯 4915761 封箱胶带 4915759 6404 2RS 4915757 Ipad 车载支架 4915755 礼品,文具,墙贴,基督教礼品 4915753 品牌内衣 4915751 聚丙烯酸 4915749 餐饮消毒毛巾、湿巾 4915747 提花 4915745 6403 2RS 4915743 采购如:葛根粉丝、蕨根粉丝、南瓜粉丝、野菜粉丝、香菇粉丝等 4915741 二手摩托车 4915739 急需采购PVC特殊袋子 4915737 女士T恤 4915735 烤弯镀膜玻璃 4915731 批发野生羊肚菌 4915733 ABS管道粘结剂 ABS胶
检索代码示例如下:
import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; public class DocSearch { private static IndexSearcher isearcher = null; public static void search(String key) throws IOException, ParseException{ Directory directory = FSDirectory.open(new File("E:\\output\\lucence\\index")); // Now search the index: IndexReader ireader = IndexReader.open(directory); // read-only=true isearcher = new IndexSearcher(ireader); // Parse a simple query that searches for "text": Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,"context", analyzer); Query query = parser.parse(key); ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs; // Iterate through the results: for (int i = 0; i < hits.length; i++) { Document hitDoc = isearcher.doc(hits[i].doc); System.out.println(hitDoc.getValues("id")[0] + "\t" + hitDoc.getValues("context")[0] + "\t" + hits[i].score); } } public static void main(String[] args) throws IOException, ParseException { search("旧水泥袋"); isearcher.close(); } }
执行结果:
4801857 采购旧编织袋、旧水泥袋 4.0172114
4829927 水泥 1.7585585 4903199 采购水泥电阻 1.0551351 4815595 求购水泥输送链条和提升机 0.70342344 4861233 1万5 潜水料啤酒手提包 手提袋 0.47982088 4815637 大量采购包装用的编织袋(新的旧的,有无商标皆可) 0.47913262 4915391 铁泥 铁灰 0.46250635 4889169 废旧砂轮 0.39993972 4903163 软陶泥,超轻粘土 0.34687978 4801611 水泵 0.30114633 4801911 手袋 0.29862976 4889443 水锈石 上水石 吸水石 0.2608004 4861275 足浴袋 泡脚袋 异形袋 0.25862095 4801871 手提袋制袋机 0.25339574 4915383 回收库存废旧油墨油漆 0.24996233 4903189 回收库存旧油漆13463048572 0.24996233 4903187 求购废旧油漆油墨13463048572 0.24996233 4903175 求购库存旧化工树脂 0.24996233 4903245 污水泵 0.24091707 4801705 出水霜 0.24091707 4874727 服裝紙袋 0.2389038 4829965 工作证袋 0.2389038 4815531 棉布袋 0.2389038 4815479 冷敷冰袋 0.2389038
可以看到这个检索结果:
1.默认的分词是最终分成一个汉字,
2.匹配出来的分数还是比较靠谱。
如何用lucene设计一个搜索引擎如何考虑的问题太多:
1.如何设计一个分布式查询;
2.数据增量更新,全量更新如何处理,不影响当前的查询引擎;
3.性能如何保证,更好地利用缓存,分布式?
4.如果设计得更通用,需要添加字段,添加排序字段,统计字段的时候能够做到快速满足需求?
5.分词模块的选择和处理
。。。
后续慢慢研究
发表评论
-
对字符串进行验证之前先进行规范化
2013-09-17 23:18 13957对字符串进行验证之前先进行规范化 应用系统中经常对字 ... -
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
2013-08-08 09:17 1482使用telnet连接到基于spring的应用上执行容器中 ... -
jdk7和8的一些新特性介绍
2013-07-06 16:07 10114更多ppt内容请查看:htt ... -
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
2013-06-28 21:35 11808原文链接: http://www.javaarch.net ... -
java对于接口和抽象类的代理实现,不需要有具体实现类
2013-06-12 09:50 2957原文链接:http://www.javaarch.net/j ... -
Java EE 7中对WebSocket 1.0的支持
2013-06-05 09:27 3846原文链接:http://www.javaarch.n ... -
Spring Security Logout
2013-06-03 00:05 2372原文地址:http://www.javaarch.net/ ... -
Spring Security Basic Authentication
2013-06-03 00:04 1742原文地址:http://www.javaarch.net/ ... -
Spring Security Form Login
2013-06-02 16:16 2149原文地址:http://www.javaarch.net/j ... -
spring3 的restful API RequestMapping介绍
2013-06-02 14:53 1155原文链接:http://www.javaarch.net/j ... -
Java Web使用swfobject调用flex图表
2013-05-28 19:05 1128Java Web使用swfobject调用 ... -
spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
2013-05-21 15:57 3344spring使用PropertyPlaceholderCon ... -
java国际化
2013-05-20 20:57 4478java国际化 本文来自:http://www.j ... -
RSS feeds with Java
2013-05-20 20:52 1226RSS feeds with Java 原文来自:htt ... -
使用ibatis将数据库从oracle迁移到mysql的几个修改点
2013-04-29 10:40 1679我们项目在公司的大战略下需要从oracle ... -
线上机器jvm dump分析脚本
2013-04-19 10:48 2912#!/bin/sh DUMP_PIDS=`p ... -
spring3学习入门示例工程
2013-04-18 09:28 11331. github地址 https://github ... -
spring map使用annotation泛型注入问题分析
2013-04-15 13:30 8547今天在整一个spring的ioc学习demo,碰到 ... -
eclipse远程部署,静态文件实时同步插件
2013-04-06 20:18 5469eclipse 远程文件实时同步,eclipse远程 ... -
java价格处理的一个问题
2013-03-26 21:21 1841我们经常会处理一些价格,比如从运营上传的文件中将某 ...
相关推荐
这个"lucene3.0.3搜索的使用示例"压缩包文件很可能是为了帮助用户理解并学习如何在项目中应用Lucene 3.0.3版本的功能。 在Lucene 3.0.3中,主要包含了以下核心概念和知识点: 1. **索引(Indexing)**:这是Lucene...
博文链接中提到的是一个关于Lucene3的博客文章,可能详细介绍了如何在实际项目中使用Lucene进行全文检索。博主"chinaxxren"在ITEYE上分享了这篇博客,虽然具体内容未在描述中给出,但我们可以推测博主可能讲解了以下...
3. **查询处理**:当用户在前端输入查询时,服务器接收到请求后,使用QueryParser解析查询字符串,生成Query对象。Query对象代表了用户的查询意图,可以是简单的关键词匹配,也可以是复杂的布尔组合。 4. **搜索...
这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...
lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子
Lucene7.4官方示例,内含若干官方实例,可用于学习Lucene
《Lucene3小例子》 Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发,它提供...这个“lucene3小例子”是一个很好的起点,帮助开发者深入理解Lucene的工作原理和使用方式,为进一步的开发工作打下坚实基础。
lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子
### 四、Lucene应用示例 对于站内搜索,例如在BBS或BLOG中,你可以创建一个索引,将所有文章的标题和内容作为字段,利用Lucene的API建立索引。当用户输入搜索词时,通过查询API查找匹配的文章,并按照相关性返回...
在"ch2"这个子目录中,可能包含了示例代码的第二章节,详细展示了如何使用Lucene创建索引、执行搜索、处理结果等。通过分析这部分代码,你可以更深入地理解Lucene的工作原理和使用方法。 总之,"lucene检索小例子...
以下是一个简单的示例代码,演示了如何使用Lucene搜索包含关键词"lucene"的文档: ```java public class TxtFileSearcher { public static void main(String[] args) throws Exception{ String queryStr = ...
"lucene示例"通常包含了演示如何使用 Lucene 的代码片段或完整的应用。这些示例可能涵盖以下内容: 1. **创建索引(Indexing)**: 如何读取文件,定义文档字段,使用Analyzer进行预处理,然后将处理后的文档添加到...
在"lucene_demo"这个压缩包中,很可能包含了一些示例代码或者项目,用于演示如何使用Lucene进行实际的文本搜索开发。这些示例通常会涵盖以下几个关键知识点: 1. **安装与配置**:Lucene的下载、构建环境的搭建,...
本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、执行查询,并比较默认的TF-IDF相似度与BM25相似度的区别。 首先,我们需要了解什么是Lucene。Lucene是一个由...
《Lucene索引小示例解析》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小...
这个压缩包文件“lucene开发部分例子”包含了关于Lucene开发的一些实例,涵盖了从基础到进阶的多个方面,对于学习和理解Lucene的使用非常有帮助。 首先,"Web搜索引擎开发实例"这部分内容将教你如何使用Lucene来...
在这个“Lucene全文检索的各种例子”中,我们将探讨如何使用不同的分词器,如ikAnalyzer和smartChineseAnalyzer,来实现中文文本的索引和搜索。 首先,让我们深入理解一下Lucene。Lucene的核心功能包括文档的索引和...
本文将深入探讨Lucene 6.6.2版本的API使用及其与IKAnalyzer中文分词器的集成应用。 一、Lucene简介 Lucene是一个高性能、可扩展的信息检索库,它提供了完整的搜索功能,包括索引创建、文档存储和查询。在Lucene ...
本示例将深入探讨如何在Lucene中实现facet查询,包括区间查询和多维度查询,以及关键概念——key-field-value模型。 **一、Lucene Facet的概念** Facets是信息组织的一种方法,类似于图书馆的分类标签。在搜索结果...