Tag: 索引

增量索引lucene

我正在使用Lucene 3.6在Java中创建应用程序,并希望提高增量率。 我已经创建了索引,我读到你要做的就是打开现有的索引,并检查每个文档的索引和文档修改日期,看它们是否不同删除索引文件并重新添加。 我的问题是我不知道如何在Java Lucene中这样做。 谢谢 我的代码是: public static void main(String[] args) throws CorruptIndexException, LockObtainFailedException, IOException { File docDir = new File(“D:\\PRUEBASLUCENE”); File indexDir = new File(“C:\\PRUEBA”); Directory fsDir = FSDirectory.open(indexDir); Analyzer an = new StandardAnalyzer(Version.LUCENE_36); IndexWriter indexWriter = new IndexWriter(fsDir,an,MaxFieldLength.UNLIMITED); long numChars = 0L; for (File f : docDir.listFiles()) { String fileName = f.getName(); […]

ElasticSearch索引问题TransportSerializationException

我正在尝试索引elasticsearch中的一些文档并获得一些错误。 但我无法理解,所以我无法解决它。 以下是错误: org.elasticsearch.transport.TransportSerializationException: Failed to deserialize exception response from stream at org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:173) at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:125) at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) at org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296) at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) at org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:310) at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268) at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255) at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) […]

如何在ElasticSearch中添加分析器设置?

我正在使用ElasticSearch 1.5.2,我希望有以下设置: “settings”: { “analysis”: { “filter”: { “filter_shingle”: { “type”: “shingle”, “max_shingle_size”: 2, “min_shingle_size”: 2, “output_unigrams”: false }, “filter_stemmer”: { “type”: “porter_stem”, “language”: “English” } }, “tokenizer”: { “my_ngram_tokenizer”: { “type”: “nGram”, “min_gram”: 1, “max_gram”: 1 } }, “analyzer”: { “ShingleAnalyzer”: { “tokenizer”: “my_ngram_tokenizer”, “filter”: [ “standard”, “lowercase”, “filter_stemmer”, “filter_shingle” ] } } } […]

Lucene通过URL搜索

我正在存储一个包含URL字段的Document: Document doc = new Document(); doc.add(new Field(“url”, url, Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field(“text”, text, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field(“html”, CompressionTools.compressString(html), Field.Store.YES)); 我希望能够通过其URL找到Document,但我得到0结果: Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30) Query query = new QueryParser(LUCENE_VERSION, “url”, analyzer).parse(url); IndexSearcher searcher = new IndexSearcher(index, true); TopScoreDocCollector collector = TopScoreDocCollector.create(10, true); searcher.search(query, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; // Display results for (ScoreDoc […]

将Document添加到索引后忘记关闭Lucene IndexWriter

我有一个程序运行2天来为大约1.6亿个文本文件构建一个Lucene索引,在程序结束后,我尝试搜索索引并发现索引没有正确构建,indexReader.numDocs()返回0.我检查过索引目录,看起来不错,所有的索引数据似乎都在那里,目录的大小是1.5千兆字节。 我检查了我的代码,发现我忘了调用indexWriter.optimize()和indexWriter.close(),我想知道是否有可能重新优化()索引,所以我不需要重建整个索引从头开始? 我真的不希望该计划再花2天时间。

使用参数化IN子句时,N1QL查询超时

使用Couchbase服务器4.1.0(和4.5),Java SDK 2.2.8(也尝试过2.2.7,2.3.1和2.3.3),我有一个利用二级索引的查询,当我运行我的代码时它运行正常本地甚至通过AWS服务器上的CBQ(CBQ大约需要3毫秒)。 但是,在AWS上运行我的应用程序时,我得到一个TimeOutException并且它只有一个查询超时,其他查询不是。 详情见下文。 值得注意的是,我的Couchbase设置有3个桶。 示例文档: “bucketName”: { “userName”: “User_A”, “MessageContent”: “This is a message”, “docType”: “msg”, “ParentMsgId”: “1234”, “MsgType”: “test”, “expireTimestamp”: 1454975772613, “publishTimestamp”: 1455322362028, “id”: “145826845”, “urls”: [], “subject”: “this is a subject”, “type”: 1, “GroupId”: “Group_1” } 二级指数: CREATE INDEX `indexName` ON `bucketName`(`ParentMsgId`,`docType`,`publishTimestamp`) USING GSI 从N1qlQuery#n1ql()提取的示例查询 {“statement”: “select count(*) as msgCount from […]

遗留索引/自动索引与Neo4j中的新索引方法之间的区别

我无法理解遗留索引方法和新索引方法之间的区别,所以也许有人可以为我澄清这些要点。 我唯一关心的是它与Java API的关系,而不是Cypher查询。 次要问题 1)Legacy Indexing与自动索引相同吗? 2)如果您没有使用自动索引,那么每次向图表添加节点时都必须指定是否应该对其进行索引? 3)我是否相信您可以启用/禁用Java api中的所有自动索引,而不必弄乱配置文件? 4)以下这一行的含义取自http://docs.neo4j.org/chunked/milestone/indexing.html 本章重点介绍如何使用手动索引和自动索引。 从Neo4j 2.0开始,这不是在Neo4j中索引数据的首选方法,而是建议在数据库模式中定义索引。 注意: 我正在使用Java API

Solr将整个索引加载到内存中

我使用solr获取类似名称的数据:年龄:性别:平衡:nextbalance:兴趣 我在磁盘上有30 M记录,总计4G。 我按年龄检索:23只有50条记录。 我在schema xml中有indexed =“true”。 Solr似乎将磁盘上的整个索引加载到内存(4G)中。 它不应该只将40多条记录检索到内存中吗?

使用MongoDb创建索引

我是MongoDB的初学者,我正在尝试一些东西。 我想存储URL并避免重复的URL我在url上创建了一个唯一的索引。 像那样 collection.createIndex(new BasicDBObject(“url”, type).append(“unique”, true)); 但每次我启动我的程序时,索引再次创建不是吗? 因为,现在我的程序只插入一个URL“http://site.com”,如果我重新启动我的程序,这个url会再次插入,就像没有索引一样。 每次创建索引是处理索引的错误方法吗? 这是我的代码示例 mongo.getCollection().ensureIndex(new BasicDBObject(“url”, 1).append(“unique”, “true”)); mongo.getCollection().insert(new BasicDBObject(“url”, “http://site.com”).append(“crawled”, 0)); mongo.getCollection().insert(new BasicDBObject(“url”, “http://site.com”).append(“crawled”, 0)); 并输出: { “_id” : { “$oid” : “50d627cf44ae5d6b5e9cf106”} , “url” : “http://site.com” , “crawled” : 0} { “_id” : { “$oid” : “50d627cf44ae5d6b5e9cf107”} , “url” : “http://site.com” , “crawled” : 0} 谢谢 […]

有效搜索已排序的数值

我有一个int[]数组,其中包含具有以下属性的值: 他们排序 它们是独一无二的 (没有重复) 它们在已知范围内 [0..MAX] MAX通常比arrays的长度大很多(例如10-100x) 有时数字在整个范围内均匀分布,但在其他时间有很长的连续数字序列。 我估计这两种情况之间约为50/50。 鉴于此列表,我想有效地找到数组中特定值的索引(或者如果该值不存在,则找到下一个更高的值)。 我已经实现了一个带间隔二分的直接二分搜索 ,它运行得相当好,但我怀疑数据的性质/分布可以被利用来更快地收敛到解决方案。 我对优化平均案例搜索时间感兴趣,但重要的是最坏的情况永远不会比O(log n)差,因为数组有时非常大。 问题:在普通情况下,有可能比纯二进制搜索做得更好吗? 编辑 (澄清其他问题/意见) O(log n)中的常数绝对重要。 事实上,假设比O(log n)更好的算法复杂度是不可能的,常量可能是唯一重要的….. 它通常是一次性搜索,因此虽然预处理是可能的,但它可能不值得。