当前位置: 首页 > 知识库问答 >
问题:

用Nest Elasticsearch处理文档的术语频率

白成济
2023-03-14
[ElasticProperty(Type = Nest.FieldType.attachment, TermVector =Nest.TermVectorOption.with_positions_offsets, Store = true)]
    public Attachment File { get; set; }
var searchResults = client.TermVector<Document>(t =>t.Id(ID).TermStatistics().Fields(f => f.File));    

共有1个答案

赫连照
2023-03-14

您可以通过client.termvector(..)来实现这一点。下面是一个简单的例子:

文档类:

public class MyDocument
{
    public int Id { get; set; } 
    [ElasticProperty(TermVector = TermVectorOption.WithPositionsOffsets)]
    public string Description { get; set; }
    [ElasticProperty(Type = FieldType.Attachment, TermVector =TermVectorOption.WithPositionsOffsetsPayloads, Store = true, Index = FieldIndexOption.Analyzed)]
    public Attachment File { get; set; }
}

索引一些测试数据:

var indicesOperationResponse = client.CreateIndex(indexName, c => c
    .AddMapping<MyDocument>(m => m.MapFromAttributes()));

var myDocument = new MyDocument {Id = 1, Description = "test cat test"};
client.Index(myDocument);
client.Index(new MyDocument {Id = 2, Description = "river"});
client.Index(new MyDocument {Id = 3, Description = "test"});
client.Index(new MyDocument {Id = 4, Description = "river"});

client.Refresh();
var termVectorResponse = client.TermVector<MyDocument>(t => t
    .Document(myDocument)
    //.Id(1) //you can specify document by id as well
    .TermStatistics()
    .Fields(f => f.Description));

foreach (var item in termVectorResponse.TermVectors)
{
    Console.WriteLine("Field: {0}", item.Key);

    var topTerms = item.Value.Terms.OrderByDescending(x => x.Value.TotalTermFrequency).Take(10);
    foreach (var term in topTerms)
    {
        Console.WriteLine("{0}: {1}", term.Key, term.Value.TermFrequency);
    }
}
Field: description
cat: 1
test: 2
{
    "my_index" : {
        "mappings" : {
            "mydocument" : {
                "properties" : {
                    "file" : {
                        "type" : "attachment",
                        "path" : "full",
                        "fields" : {
                            "file" : {
                                "type" : "string"
                            },
                            "author" : {
                                "type" : "string"
                            },
                            "title" : {
                                "type" : "string"
                            },
                            "name" : {
                                "type" : "string"
                            },
                            "date" : {
                                "type" : "date",
                                "format" : "dateOptionalTime"
                            },
                            "keywords" : {
                                "type" : "string"
                            },
                            "content_type" : {
                                "type" : "string"
                            },
                            "content_length" : {
                                "type" : "integer"
                            },
                            "language" : {
                                "type" : "string"
                            }
                        }
                    },
                    "id" : {
                        "type" : "integer"
                    }
                }
            }
        }
    }
}

当我通过sense创建索引时:

PUT http://localhost:9200/my_index/mydocument/_mapping
{
  "mydocument": {
    "properties": {
      "file": {
        "type": "attachment",
        "path": "full",
        "fields": {
          "file": {
            "type": "string",
            "term_vector":"with_positions_offsets",
            "store": true
          }
        }
      }
    }
  }
}

我能够检索术语统计数据。

希望稍后我会带着通过Nest创建的工作映射回来。

var indicesOperationResponse = client.CreateIndex(indexName, c => c
        .AddMapping<MyDocument>(m => m
            .MapFromAttributes()
            .Properties(ps => ps
                .Attachment(s => s.Name(p => p.File)
                    .FileField(ff => ff.Name(f => f.File).TermVector(TermVectorOption.WithPositionsOffsets)))))
    );
 类似资料:
  • 对于我对ElasticSearch的一些查询,我希望返回三条信息: 结果文档集中出现了哪些术语T? T的每个元素在结果文档集中出现的频率是多少? T的每个元素在整个索引(-- 使用缺省术语facet或现在的术语aggregation方法可以很容易地确定第一点。所以我的问题其实是关于第三点。在ElasticSearch 1.x之前,即在切换到“聚合”范式之前,我可以使用一个term facet,将“

  • 问题内容: 我是相当新的elasticsearch,使用6.5版。我的数据库包含网站页面及其内容,如下所示: 我已经能够执行一个简单的查询,该查询返回所有内容中包含“汽车”一词的文档(使用Python): 结果看起来像这样: “ _id”指的是一个域,所以我基本上回来了: abc.com def.com jkl.com 但我现在想知道如何往往是搜索关键词(“汽车”)出现 在 每个文档,如: abc

  • 对于有任何批处理操作经验的架构师来说,在Spring Batch中所使用的批处理的整体概念都会感到熟悉与舒适。其中有”Jobs”,”Steps”以及开发者所提供的被称为”ItemReader”和”ItemWriter”的批处理单元。另外,基于Spring的模式、操作、模板、回调和术语,还有着以下的方便性: 在分离关注点方面的显著增强 轮廓清晰的架构层次与作为接口提供服务 简单与默认的实现能够快速的

  • 问题内容: 我正在尝试使用NLTK和熊猫创建术语文档矩阵。我写了以下函数: 运行它 它适用于语料库中的一些小文件,但是 当我尝试使用4,000个文件(每个约2 kb)的语料库运行它时,出现 MemoryError 。 我想念什么吗? 我正在使用32位python。(在Windows 7、64位OS,Core Quad CPU,8 GB RAM上)。我真的需要对这种大小的语料库使用64位吗? 问题答

  • 另外,类型中的所有文档都存储了上面提到的community的值。感谢帮助。

  • 主要内容:XML解析器API,用SAX API解析XML,用DOM API解析XML可扩展标记语言(XML)是一种非常类似于HTML或SGML的标记语言。这是由万维网联盟推荐的,可作为开放标准提供。 .Net Framework中的命名空间包含用于处理XML文档的类。以下是命名空间中的一些常用类。 编号 类 说明 1 代表一个属性。属性的有效值和默认值是在文档类型定义(DTD)或模式中定义的。 2 代表CDATA部分。 3 提供几个类使用的文本操作方法。 4 表示XML注释的内容