elasticsearch,nest,C#,Windows,elasticsearch,Nest" /> elasticsearch,nest,C#,Windows,elasticsearch,Nest" />

C# 具有附件突出显示功能的客户端.Net嵌套

C# 具有附件突出显示功能的客户端.Net嵌套,c#,windows,elasticsearch,nest,C#,Windows,elasticsearch,Nest,我最近开始使用Elastic Search及其.net客户端嵌套。 有很多问题要问 我当前在尝试使用elasticsearch mapper attachments插件突出显示附件字段中的搜索结果时被阻止。 索引工作正常,映射似乎正确,编码和解码也工作正常 当我尝试按关键字搜索时,ES似乎能够找到包含关键字的正确文档,但在突出显示结果中,它没有显示解码文本,也没有显示编码文本 从另一篇处理一些相同功能的文章中可以看出,解决方案是将store=yes和TermVector=TermVectorOp

我最近开始使用Elastic Search及其.net客户端嵌套。 有很多问题要问

我当前在尝试使用elasticsearch mapper attachments插件突出显示附件字段中的搜索结果时被阻止。 索引工作正常,映射似乎正确,编码和解码也工作正常

当我尝试按关键字搜索时,ES似乎能够找到包含关键字的正确文档,但在突出显示结果中,它没有显示解码文本,也没有显示编码文本

从另一篇处理一些相同功能的文章中可以看出,解决方案是将store=yes和TermVector=TermVectorOption.WithPositionsOffset设置为

所以我试着在我的C#类文件中用

[ElasticProperty(Name = "attach", Type = FieldType.Attachment, Store=true, TermVector = TermVectorOption.WithPositionsOffsets)] 
public string attach { get; set; } 
查询如下(但是没有返回突出显示结果)


似乎在从类创建类型映射时,附件属性设置不正确: 因为在检查时 localhost:9200/myindex/mytype/_映射?很好 “附件”属性没有属性 Store=true, TermVector=TermVectorOption.WithPositionsOffset 为了它

你有什么想法吗?
谢谢

我无法仅通过对GitHub问题的回应来实现这一点,尽管它确实让我走上了正确的方向。经过反复试验,我得出以下结论:

博士班 附件将自动与所有内部字段一起创建,因此您不必为附件创建另一个类。我认为可以做一些类似于公认答案的事情,但是在创建索引时必须手动添加所有属性

pdf文件的索引创建和存储
var index=“我的应用程序”;
var node=新Uri(“http://localhost:9200");
var设置=新连接设置(节点,defaultIndex:index);
var客户端=新的ElasticClient(设置);
//创建索引,指示内部“文件”字段的内容
//并且内部“标题”字段应与位置偏移一起存储到
//允许突出显示。
CreateIndex(_index,c=>c
.AddMapping(m=>
m、 属性(ps=>
附件(a=>
a、 名称(o=>o.File)
.FileField(t=>t.Name(“文件”)
.TermVector(TermVectorOption.WithPositionsOffset)
.Store()
).TitleField(t=>t
.姓名(“头衔”)
.TermVector(TermVectorOption.WithPositionsOffset)
.Store())
)
).属性(ps=>
ps.String(s=>
s、 名称(o=>o.Title)
)
)
)
);
字符串路径=@“path\to\sample1.pdf”;
var doc=新文档()
{
Title=“任何你想要的”,
File=Convert.ToBase64String(System.IO.File.ReadAllBytes(路径))
};
客户索引(doc);
搜寻
var queryString=“pdf中的某些内容”;
var searchResults=\u client.Search(s=>
s、 字段(“文件”、“标题”)
.Query(Query=>QueryString(x=>x.Query(QueryString)))
.突出显示(x=>
x、 OnFields(y=>
y、 OnField(f=>f.File)
.PreTags(“”)
.PostTags(“”)
)
)
);

Nest的Github中已给出回复
{ 
"fields" : ["name","attach"], 
  "query" : { 
    "query_string" : { 
      "query" : "settings" 
    } 
  }, 
  "highlight" : { 
    "fields" : { 
      "attach" : {} 
    } 
  } 
} 
public class Doc
{
    public string File { get; set; }
    // As an example for including additional fields:
    public string Title { get; set; } 
}
var index = "my-application";
var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(node, defaultIndex: index);
var client = new ElasticClient(settings);

// Create the index, indicating that the contents of the internal "file" field 
// and the internal "title" field should be stored with position offsets to 
// allow highlighting.
client.CreateIndex(_index, c => c
    .AddMapping<Doc>(m => 
        m.Properties(ps => 
            ps.Attachment(a =>
                a.Name(o => o.File)
                    .FileField(t => t.Name("file")
                    .TermVector(TermVectorOption.WithPositionsOffsets)
                    .Store()
                ).TitleField(t => t                  
                 .Name("title")
                 .TermVector(TermVectorOption.WithPositionsOffsets)
                 .Store())
             )
        ).Properties(ps =>
            ps.String(s => 
                s.Name(o => o.Title)
            )
        )
    )
);

string path = @"path\to\sample1.pdf";

var doc = new Doc()
{
    Title = "Anything you want",
    File = Convert.ToBase64String(System.IO.File.ReadAllBytes(path))
};

client.Index(doc);
var queryString = "something in your pdf";
var searchResults = _client.Search<Doc>(s => 
           s.Fields("file", "title")
            .Query(quer => quer.QueryString(x => x.Query(queryString)))
            .Highlight(x => 
                    x.OnFields(y => 
                        y.OnField(f => f.File)
                         .PreTags("<strong>")
                         .PostTags("</strong>")
            )
       )
   );