简体   繁体   English

使用Nest进行Elasticsearch

[英]Using Nest for elasticsearch

Hi I'm using Nest as an interface to Elastisearch. 嗨,我将Nest用作Elastisearch的接口。 Everything works fine, there is only one thing I am unable to do. 一切正常,我只能做一件事。 And that is Highlighting. 这就是重点。

I have the following 'model' 我有以下“模特”

[ElasticType(Name = "WebResource", SearchAnalyzer = "full_name", IndexAnalyzer = "partial_name", DateDetection = true, NumericDetection = true)]
public class WebResource
{
    public string _id;
    [ElasticProperty(Type = FieldType.integer_type, Index = FieldIndexOption.not_analyzed)]
    public string Id
    {
        get
        {
            if (_id == null || _id == Guid.Empty.ToString())
            {
                _id = Guid.NewGuid().ToString();
            }
            return _id;
        }
        set
        {
            _id = value;
        }
    }

    [ElasticProperty(Type = FieldType.string_type, Index = FieldIndexOption.analyzed)]
    public string Keywords { get; set; }

    [ElasticProperty(Type = FieldType.string_type, Index = FieldIndexOption.analyzed)]
    public string Content { get; set; }
}

I have an index and a search returns documents but the highlight is always zero 我有一个索引,搜索返回文档,但突出显示始终为零

Client.Search<WebResource>(g => g.Query(k => k.Term(l => l.Content, searchText) || k.Term(l => l.Keywords, searchText)).Highlight(k => k.OnFields(p => p.OnField("Keywords"), p => p.OnField("Content")).FragmentSize(200)));

Where searchText is the searchtext. 其中searchText是searchtext。 Any help is appreciated. 任何帮助表示赞赏。

Kind regards JR 亲切的问候

Turns out this question is related to NEST (elasticsearch) Highlighting in multiple fields 原来这个问题与NEST(elasticsearch)在多个领域的突出显示有关

My solution was to break it up in to a more readable form 我的解决方案是将其分解为更具可读性的形式

Action<HighlightFieldDescriptor<WebResource>> actWeb = (t) => t.OnField(g => g.Content);
Action<HighlightFieldDescriptor<WebResource>> actKey = (t) => t.OnField(g => g.Keywords);

Action<HighlightDescriptor<WebResource>> higDesc = t => t.OnFields(actWeb,actKey);

SearchDescriptor<WebResource> searchdesc = new SearchDescriptor<WebResource>();

searchdesc.Query( t => t.Term( k => k.Content,searchText) || t.Term( l =>l.Keywords,searchText));                
searchdesc.Highlight(higDesc);

 var resp = Client.Search(searchdesc);

Turns out it's the way you combine the fields. 事实证明,这是组合字段的方式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM