0

我正在使用类似的东西:

Field notdirectory = new Field("notdirectory","1", Field.Store.NO, Field.Index.UN_TOKENIZED);

并且像“notdirectory:1”这样的查询可以一直很好地处理。

但最近我改变了“Field.Store.NO, Field.Index.UN_TOKENIZED”来索引一个非数字字符串:

Field stateField = new Field("state","irn_" + state, Field.Store.NO, Field.Index.UN_TOKENIZED);

并且像“state:irn_CA”这样的查询再也无法获取任何结果,即使我通过hadoop日志看到“irn_CA”实际上已添加到“state”字段中。

所以我怀疑满足“Field.Store.NO,Field.Index.UN_TOKENIZED”的字段,只有数字字段可以搜索,但我没有看到任何相关文档。

那么这其中的真正原因是什么呢?

4

2 回答 2

2

我认为,您正在使用 StandardAnalyzer 解析输入查询,这会将您的输入查询“irn_CA”标记为两个标记 - “irn”和“CA”。由于索引将“irn_CA”作为单个标记,因此它不会匹配。

搜索时尝试使用KeywordAnalyzer。它将为查询字符串生成单个标记并正确匹配索引标记。

于 2009-06-18T05:42:18.477 回答
0

我认为 searcher bean 强制所有内容都小写......所以在添加到索引时使状态为小写:

Field stateField = new Field("state","irn_" + state.toLowerCase(), Field.Store.NO, Field.Index.UN_TOKENIZED);

当您查询时:“state:irn_ca”而不是“state:irn_CA”。

我还注意到您以 'irn_' 为前缀 - 好调用,否则荧光笔会标记查询。

于 2011-05-04T16:07:17.270 回答