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

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

以下选项是

  • Store.Yes
  • Store.No

  • Index.Tokenized
  • Index.Un_Tokenized
  • Index.No
  • Index.No_Norms

我不太了解商店选项。 为什么你会不想存储你的领域?
Tokenizing正在分割内容,并删除噪音词/分隔符(如“和”,“或”等)
我不知道规范可能是什么。 标记值如何存储?
如果我将值“我的string”存储在“fieldName”中会发生什么? 为什么不查询

 fieldName:my string 

回报什么?

Store.Yes

意味着该字段的值将被存储在索引中

Store.No

意味着该字段的值不会被存储在索引中

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

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

Index.Tokenized

意味着这个字段在索引时会被标记(你得到了那个)。 这对于有多个词的长字段很有用。

Index.Un_Tokenized

意味着该字段将不被分析,并将被存储为一个单一的值。 这对于关键字/单词和一些简短的多字段是很有用的。

Index.No

究竟是什么意思。 该字段不会被索引,因此是不可测量的。 但是,您可以使用Index.No和Store.Yes来存储您不希望被search的值。

Index.No_Norms

与Index.Un_Tokenized相同,只是通过不存储某些标准化数据可以节省几个字节。 这个数据是用于增强和场长标准化的。

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

  • Field.Index
  • Field.Store

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

fieldName:“我的string”

在fieldName字段中search单词“my”和“string”:

fieldName :(我的string)

如果有任何Java用户遇到这种情况,Lucene 4.6.0 Java库中仍然存在2009年3月相同的选项,但不推荐使用。 目前设置这些选项的方法是通过FieldType 。

Store.YES会让您能够突出显示与您的search关键词匹配的单词(通过突出显示function)。 这意味着不仅仅是检索,还显示