2016-12-12 1 views
0

Поскольку заголовок уже указывает, я пытаюсь индексировать документы MS Word и делать полный текстовый поиск внутри.Elasticsearch - попытка индексирования вложения MS Word и полнотекстового поиска в пределах

Я видел несколько примеров, но я не могу понять, что я делаю неправильно.

Соответствующий код:

[ElasticsearchType(Name = "AttachmentDocuments")] 
public class Attachment 
{ 
    [String(Name = "_content")] 
    public string Content { get; set; } 
    [String(Name = "_content_type")] 
    public string ContentType { get; set; } 
    [String(Name = "_name")] 
    public string Name { get; set; } 

    public Attachment(Task<File> file) 
    { 
     Content = file.Result.FileContent; 
     ContentType = file.Result.FileType; 
     Name = file.Result.FileName; 
    } 
} 

Свойство "Содержание" выше установлено значение "file.Result.FileContent" в конструкторе. Свойство «Content» является строкой base64.

public class Document 
{ 
    [Number(Name = "Id")] 
    public int Id { get; set; } 
    [Attachment] 
    public Attachment File { get; set; } 
    public String Title { get; set; } 
} 

Ниже приведен метод индексации документов в базу данных elasticsearch.

public void IndexDocument(Attachment attachmentDocument) 
    { 
     // Create the index if it does not already exist 
     var indexExists = _client.IndexExists(new IndexExistsRequest(ElasticsearchIndexName)); 
     if (!indexExists.Exists) 
     { 
      var indexDescriptor = 
       new CreateIndexDescriptor(new IndexName {Name = ElasticsearchIndexName}).Mappings(
        ms => ms.Map<Document>(m => m.AutoMap())); 
      _client.CreateIndex(indexDescriptor); 
     } 

     var doc = new Document() 
     { 
      Id = 1, 
      Title = "Test", 
      File = attachmentDocument 
     }; 

     _client.Index(doc); 
    } 

Основываясь на приведенном выше коде, документ индексируется в правильный индекс (Скриншот из Elasticsearch хоста - Searchly):

Searchly Screenshot

Содержание в файле: "VCXCVXCVXCVXCVXVXCVXCV" и с помощью следующего запроса я получаю ноль хитов взамен:

 QueryContainer queryContainer = null; 
     queryContainer |= new MatchQuery() 
     { 
      Field = "file", 
      Query = "VCXCVXCVXCVXCVXVXCVXCV" 
     }; 

     var searchResult = 
      await _client.LowLevel.SearchAsync<string>(ApplicationsIndexName, "document", new SearchRequest() 
      { 
       From = 0, 
       Size = 10, 
       Query = queryContainer, 
       Aggregations = GetAggregations() 
      }); 

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

Обеспечение скриншотого отображения в моей базе данных Elasticsearch:

Elasticsearch - Mapping

+0

Является содержимым base64? –

+0

Содержимое base64. –

+0

Почему Поле = "файл", если на экране у вас есть _content? –

ответ

1

Потому что вы ссылаетесь на неправильное поле. Поле должно быть file.content

queryContainer |= new MatchQuery() 
     { 
      Field = "file.content", 
      Query = "VCXCVXCVXCVXCVXVXCVXCV" 
     }; 
+0

Пробовал, но не работал. –

+0

@JagjitSingh я обновил ответ сейчас –

+1

Это сработало, спасибо! –

Смежные вопросы