在elasticsearch中,如何使索引字段具有lucene IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS?

时间:2015-05-30 01:49:16

标签: elasticsearch

我正在尝试使用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 TermsEnumDocsAndPositionsEnum对象获取有关位置,偏移和有效负载的任何信息从我可以在那里看到的标记索引的AtomicReaderContext初始化。

1 个答案:

答案 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图像搜索。