Lucene索引:解释存储和索引模式

Lucene索引:解释存储和索引模式,lucene,Lucene,我想我还不了解lucene索引选项 以下选项是 Store.是 Store.No 及 Index.Tokenized Index.Un_标记化 Index.No 索引。无规范 我真的不明白商店的选择。为什么不存储字段? 标记化是对内容进行拆分并删除干扰词/分隔符(如“and”、“or”等) 我不知道什么是规范。 如何存储标记化值? 如果我在“fieldName”中存储值“my string”,会发生什么? 为什么没有一个查询 fieldName:my string 退货吗?Store.

我想我还不了解lucene索引选项

以下选项是

  • Store.是
  • Store.No

  • Index.Tokenized
  • Index.Un_标记化
  • Index.No
  • 索引。无规范
我真的不明白商店的选择。为什么不存储字段?
标记化是对内容进行拆分并删除干扰词/分隔符(如“and”、“or”等)
我不知道什么是规范。 如何存储标记化值?
如果我在“fieldName”中存储值“my string”,会发生什么? 为什么没有一个查询

fieldName:my string
退货吗?

Store.Yes 表示字段的值将存储在索引中

商店,没有 表示该字段的值不会存储在索引中

Store.Yes/No不影响lucene的索引或搜索。它只是告诉lucene您是否希望它充当字段中值的数据存储。如果使用Store.Yes,则搜索时,该字段的值将包含在搜索结果文档中

如果您将数据存储在数据库中,并且只使用Lucene索引进行搜索,那么您可以在所有字段中使用Store.No。但是,如果您也将索引用作存储,那么您将需要Store.Yes

索引。标记化 意味着该字段在索引时将被标记化(您得到了该字段)。这对于包含多个单词的长字段很有用

Index.Un_标记化 表示该字段将不进行分析,而是作为单个值存储。这对于关键字/单个单词和一些简短的多单词字段很有用

索引号 正是它说的。该字段将不会被索引,因此不可检索。但是,您可以将Index.No与Store.Yes一起使用来存储您不希望搜索的值

索引No_规范 与Index.Un_标记化相同,只是不存储一些规范化数据会节省一些字节。此数据用于增强和字段长度规范化

为了进一步阅读,lucene javadocs是无价的(当前API版本4.4.0):

对于你的最后一个问题,关于为什么你的查询没有返回任何东西,而不知道你是如何索引该字段的,我想说这是因为你的fieldName限定符只附加到“my”字符串上。要搜索所需的短语“我的字符串”:

字段名:“我的字符串”

在fieldName字段中搜索“我的”和“字符串”:

字段名:(我的字符串)


如果有Java用户无意中发现了这一点,那么2009年3月答案中的相同选项仍然存在于Lucene 4.6.0 Java库中,但已被弃用。当前设置这些选项的方法是通过。

Store.YES将使您能够突出显示和搜索关键字匹配的单词(通过突出显示功能)。这意味着不仅要检索,而且要显示

谢谢,这样可以清除一两件事情。但仍然不确定我的索引/搜索有什么问题。但现在我对我正在做的事情有了更好的了解。你在使用2.4.1吗?因为那些Field.Index的值已经被弃用,取而代之的是更清晰的新名称,所以我(如果我没有弄错的话还有OP)一直在使用Lucene.Net,这已经落后了很多。我不记得该端口目前与哪个版本等效,但这些是它可用的值。据我所知,Lucene.net版本号与Lucene 2.9.1的Lucene版本匹配,INDEX.TOKENIZED不推荐使用。文档中说它刚刚被重命名为ANALYZER,但我不认为它的意思保持不变。有人知道更多关于INDEX.ANALYZER的详细信息吗?