Как искать содержимое документа, прикрепленного в индексе elasticsearch

Я создал индекс в elasticsearch как

this.client.CreateIndex("documents", c => c.Mappings(mp => mp.Map<DocUpload>
              (m => m.Properties(ps => ps.Attachment
                                     (a => a.Name(o => o.Document)
                                            .TitleField(t => t.Name(x =>  x.Title).TermVector(TermVectorOption.WithPositionsOffsets))
                                             )))));

вложение кодируется base64 перед индексированием. Я не могу искать содержимое внутри любого документа. Кодировка base64 создает какие-либо проблемы. Кто-нибудь может помочь?

Ответ браузера такой

    {
 "documents": {
   "aliases": {},
   "mappings": {
  "indexdocument": {
    "properties": {
      "document": {
        "type": "attachment",
        "fields": {
          "content": {
            "type": "string"
          },
          "author": {
            "type": "string"
          },
          "title": {
            "type": "string",
            "term_vector": "with_positions_offsets"
          },
          "name": {
            "type": "string"
          },
          "date": {
            "type": "date",
            "format": "strict_date_optional_time||epoch_millis"
          },
          "keywords": {
            "type": "string"
          },
          "content_type": {
            "type": "string"
          },
          "content_length": {
            "type": "integer"
          },
          "language": {
            "type": "string"
          }
        }
      },
      "documentType": {
        "type": "string"
      },
      "id": {
        "type": "long"
      },
      "lastModifiedDate": {
        "type": "date",
        "format": "strict_date_optional_time||epoch_millis"
      },
      "location": {
        "type": "string"
      },
      "title": {
        "type": "string"
      }
    }
  }
},
"settings": {
  "index": {
    "creation_date": "1465193502636",
    "number_of_shards": "5",
    "number_of_replicas": "1",
    "uuid": "5kCRvhmsQAGyndkswLhLrg",
    "version": {
      "created": "2030399"
    }
  }
},
"warmers": {}
}
 }

person Ajoe    schedule 08.06.2016    source источник
comment
Я думаю, что что-то не так с вашим отображением контента. Для меня это что-то вроде это. Возможно, что-то не так с вашим определением класса вложений.   -  person ASN    schedule 13.06.2016


Ответы (1)


Я нашел решение, добавив анализатор.

var fullNameFilters = new List<string> { "lowercase", "snowball" };
        client.CreateIndex("mydocs", c => c
              .Settings(st => st
                        .Analysis(anl => anl
                        .Analyzers(h => h
                            .Custom("full", ff => ff
                                 .Filters(fullNameFilters)
                                 .Tokenizer("standard"))
                            )
                            .TokenFilters(ba => ba
                                .Snowball("snowball", sn => sn
                                    .Language(SnowballLanguage.English)))                    
                             ))
                         .Mappings(mp => mp
                         .Map<IndexDocument>(ms => ms
                         .AutoMap()
                         .Properties(ps => ps
                             .Nested<Attachment>(n => n
                                 .Name(sc => sc.File)
                             .AutoMap()
                             ))
                        .Properties(at => at
                        .Attachment(a => a.Name(o => o.File)
                        .FileField(fl=>fl.Analyzer("full"))
                        .TitleField(t => t.Name(x => x.Title)
                        .Analyzer("full")
                        .TermVector(TermVectorOption.WithPositionsOffsets)
                        )))

                        ))                        
                        );
person Ajoe    schedule 21.06.2016