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