我正在尝试使用elasticsearch来增强我用Lucene实现的图像搜索项目。我很难找到一种方法来配置elasticsearch以使索引字段具有Lucene IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS
。
工作的Lucene索引代码是:
Document doc = new Document();
FieldType myFieldType = new FieldType();
myFieldType.setIndexed(true);
myFieldType.setOmitNorms(true);
myFieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); // tell indexer to store image token's positions, offsets, and payloads
myFieldType.setStored(false);
myFieldType.setTokenized(true);
myFieldType.freeze();
doc.add(new Field("tokens", tokenStream_w_payload, myFieldType));
indexWriter.addDocument(doc);
我将分析器和查询处理程序设置为elasticsearch插件没有问题,但是使用默认的弹性搜索设置,我无法从Lucene TermsEnum
和DocsAndPositionsEnum
对象获取有关位置,偏移和有效负载的任何信息从我可以在那里看到的标记索引的AtomicReaderContext
初始化。
答案 0 :(得分:0)
我自己找到了答案。
看来我必须实现并插入自己的Analyzer。常见的分析仪接缝不会产生和支持偏移和有效载荷。
这是我的工作字段映射:
curl -XPUT "http://localhost:9200/sm101" -d'
{
"mappings": {
"sample": {
"properties": {
"DOC_ID" : {"type" : "integer", "store" : "yes" },
"NAME" : {"type" : "string", "store" : "yes" },
"tokens": {
"type": "string",
"store" : "yes",
"index" : "analyzed",
"analyzer": "image_starmap",
"index_options" : "offsets",
"term_vector": "with_positions_offsets_payloads"
},
"filepath" : {
"type": "string",
"store" : "yes",
"index" : "analyzed"
}
}
}
}
}'
它可以很好地处理我复杂的ImageStarmapSpansQuery图像搜索。