2015-12-03 16 views
1

我发现如果Lucene太大(看起来像16kb的限制),它不会索引未分析的字段。Lucene索引不大,未分析的字段

在我的应用程序中,我正在寻找例如。 “*东西*”。这工作正常,找到我的文档。如果我增加了超过16kb的文本大小,搜索将停止查找它。

这里的领域是如何加入...

String property = ... 
String value = ... 
Field field = new Field(property, value, Field.Store.NO, Field.Index.NOT_ANALYZED); 

由于日食的错误,我无法调试Lucene的代码(目前,安装NetBeans!),所以不知道是否有人知道,其中,极限是否设置,如果可以增加?

而之前有人建议不使用NOT_ANALYZED或缩短文本,那在管道中!

+0

Lucene中的未分析字段的确存在限制。更确切地说,单个词的长度是有限制的(参见[IndexWriter#MAX_TERM_LENGTH](http://lucene.apache.org/core/5_3_0/core/org/apache/lucene/index/IndexWriter.html# MAX_TERM_LENGTH))。当然,您可以使用适当的分析仪分析文本,并根据这些信息进行搜索。 – user1071777

回答

1

我知道你说的不是建议,但:

不要使用NOT_ANALYZED搜索长,满文本字段。

索引长,全文字段NOT_ANALYZED,然后用双通配符搜索意味着你是从Lucene的全文检索功能,让绝对没有好处。这种实现只是一个由lucene驱动的,额外花式的linear search。您还可以将所有数据存储在纯文本文件中,并一次搜索匹配一个字符。

我相信,改变这个硬性最大期限的规模将是困难的。它将需要在DocumentsWriter impl中进行更改,并且注释表明需要修改字段缓存实现。不值得深入研究以继续使用过于复杂的线性搜索。

你说分析正在进行中,但它是使用lucene实际执行有效搜索的核心。稍后添加它不是一个很酷的功能,这是你必须必须。如果需要,请从StandardAnalyzer开始,并从那里进行改进。

+0

我知道,我知道,我知道... :)我们有一个分析版本,这是一个传统支持的东西。你知道常数/评论在哪里,所以我可以看看吗? – TedTrippin

+0

没有办法,你可以对遗留的东西进行一些调整,并在它变得太长之前将其切断(或分成两个术语)?当然,我认为你需要创建你自己的'DocumentsWriterPerThread'的impl,改变'MAX_TERM_LENGTH_UTF8'([见这里](http://grepcode.com/file/repo1.maven.org/maven2/org)。 apache.lucene/lucene的核/ 5.2.1 /组织/阿帕奇/ lucene的/索引/ DocumentsWriterPerThread.java#DocumentsWriterPerThread.0MAX_TERM_LENGTH_UTF8))。不知道你会得到什么样的副作用,但它确实看起来像是有限制的原因。尽管如此,祝你好运! – femtoRgon

+0

我找不到任何用法,但评论肯定听起来像是根本原因。谢谢。 – TedTrippin