0

このようなメッセージをelasticsearchにプッシュしようとしています

id=1
list=asd,bcv mnmn,kjkj, pop asd dgf

そのため、各メッセージにはid文字列であるlistフィールドと、文字列値のリストを含むフィールドがあります

これをエラスティックにプッシュしてキバナでチャートを作成しようとすると、デフォルトのアナライザーが作動listしてスペース文字で分割されます。したがって、それは私の価値観を壊します。としてインデックスのマッピングを作成しようとしました

mapping='''
{ 
"test":
    { 
  "properties": {
        "DocumentID": {
          "type": "string"
        },
        "Tags":{
            "type" : "string",
          "index" : "not_analyzed"
        }
      }
    }
}'''

es = Elasticsearch([{'host': server, 'port': port}])
indexName = "testindex"    
es.indices.create(index=indexName, body=mapping)

これにより、定義したマッピングでインデックスが作成されます。今、私は単にメッセージをプッシュします

es.index(indexName, docType, messageBody)

でも今でもキバナは私の価値観を壊してくれます!マッピングが適用されなかったのはなぜですか?

そして私がするとき

GET /testindex/_mapping/test

私は得る

{
  "testindex": {
    "mappings": {
      "test": {
        "properties": {
          "DocumentID": {
            "type": "string"
          },
          "Tags": {
            "type": "string"
          }
        }
      }
    }
  }
}

なぜマッピングが変更されたのですか?マッピング タイプを指定する方法

es.index()
4

2 に答える 2

0

私は正しいマッピングを機能させることができました

es.indices.create(index=indexName)
es.indices.put_mapping(docType, mapping, indexName)

理由がわからない

es.indices.create(index=indexName, body=mapping)

動作しませんでした。これは、API に従って機能するはずでした。

于 2016-02-01T19:33:11.783 に答える