I am new in elasticsearch and want to get the top N term frequency of the "content" field of a specific document using Nest elasticsearch. I've searched a lot to find a proper answer that works for me, but I just got that I should use Terms vector and not Term Facet since it counts the terms in the whole set of documents. I know that I should do some settings for Term Vector like below;
[ElasticProperty(Type = Nest.FieldType.attachment, TermVector =Nest.TermVectorOption.with_positions_offsets, Store = true)]
public Attachment File { get; set; }
I searched for getting the term frequency of a specific document using Nest Elasticsearch a lot but all I found were about Lucene and Solr. I need an example in Nest elasticsearch. I appreciate your help.
One more question; Actually the solution(suggested by Rob) works well when I want to get the Term frequency of a string like the title of my documents. But when I change the target Field to the Content of the documents, I gain no results back! in order to be able to search the content of documents, I followed the answer in this link: ElasticSearch & attachment type (NEST C#) and it works fine and I can search a term through the Content of the document but for getting the TF it does not work; Below is the code for it;
var searchResults = client.TermVector<Document>(t =>t.Id(ID).TermStatistics().Fields(f => f.File));
Does anyone have a solution for it?
You can do this by
client.TermVector(..)
. Here is a simple example:Document class:
Index some test data:
Retrieve term statistics through NEST:
Output:
Hope it helps.
UPDATE
When I checked mapping for index one thing was interesting:
There is no information about term vector.
When I have created index through sense:
I was able to retrieve term statistics.
Hope I'll be back later with working mapping created through NEST.
UPDATE2
Based on Greg's answer try this fluent mapping: