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

Bor*_*ens 44 lucene

我想我仍然不理解lucene索引选项.

以下选项是

  • Store.Yes
  • Store.No

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

我真的不明白商店的选择.你为什么不想存放你的田地?
令牌化是分割内容并删除干扰词/分隔符(如"和","或"等)
我不知道规范可能是什么.如何存储标记化值?
如果我在"fieldName"中存储值"my string"会发生什么?为什么不查询

fieldName:my string
Run Code Online (Sandbox Code Playgroud)

什么回报?

dus*_*ell 84

Store.Yes

表示该字段的值将存储在索引中

Store.No

表示该字段的值不会存储在索引中

Store.Yes/No不会影响索引或使用lucene进行搜索.它只是告诉lucene,如果你想让它充当字段中值的数据存储区.如果使用Store.Yes,则在搜索时,该字段的值将包含在搜索结果文档中.

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

Index.Tokenized

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

Index.Un_Tokenized

表示不会分析该字段,并将其存储为单个值.这对于关键字/单字和一些短的多字字段很有用.

Index.No

究竟是什么意思.该字段不会被编入索引,因此无法搜索.但是,您可以使用Index.No和Store.Yes来存储您不想搜索的值.

Index.No_Norms

与Index.Un_Tokenized相同,除了通过不存储一些规范化数据将保存几个字节.该数据用于增强和场长标准化.

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

对于你的上一个问题,关于为什么你的查询没有返回任何东西,不知道你如何索引该字段,我会说这是因为你的fieldName限定符只附加到'my'字符串.要搜索您想要的短语"my string":

fieldName:"my string"

在fieldName字段中搜索单词"my"和"string":

fieldName :(我的字符串)