我使用的是:
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”的字段,只有数字字段可以搜索,但我没有看到任何关于它的文档。
那么这是什么原因呢?
答案 0 :(得分:2)
我认为,您正在使用StandardAnalyzer来解析输入查询,它会将输入查询“irn_CA”标记为两个标记 - “irn”和“CA”。由于索引将“irn_CA”作为单个标记,因此不匹配。
尝试使用KeywordAnalyzer进行搜索。它将为查询字符串生成单个标记,并正确匹配索引标记。
答案 1 :(得分:0)
我认为搜索者强制所有内容都是小写的...所以在添加到索引时使状态为小写:
Field stateField = new Field("state","irn_" + state.toLowerCase(), Field.Store.NO, Field.Index.UN_TOKENIZED);
当你查询:'state:irn_ca'而不是'state:irn_CA'。
我还注意到你以'irn_'为前缀 - 好的电话,否则荧光笔会标记查询。