You are currently browsing legacy 4.1 version of documentation. Click here to switch to the newest 5.1 version.
Session: How to Use MoreLikeThis
MoreLikeThis
is available through query extension methods and will return similar documents according to the provided criteria and options.
Syntax
IRavenQueryable<T> MoreLikeThis<T>(MoreLikeThisBase moreLikeThis);
IRavenQueryable<T> MoreLikeThis<T>(Action<IMoreLikeThisBuilder<T>> builder);
Parameters | ||
---|---|---|
moreLikeThis | MoreLikeThisBase |
Defines the type of MoreLikeThis that should be executed |
builder | Action<IMoreLikeThisFactory<T>> |
Builder with fluent API that constructs the MoreLikeThisBase instance |
Builder
IMoreLikeThisOperations<T> UsingAnyDocument();
IMoreLikeThisOperations<T> UsingDocument(string documentJson);
IMoreLikeThisOperations<T> UsingDocument(Expression<Func<T, bool>> predicate);
IMoreLikeThisOperations<T> WithOptions(MoreLikeThisOptions options);
Parameters | ||
---|---|---|
documentJson | string | Inline JSON document that will be used as a base for operation |
predicate | Expression<Func<T, bool>> |
Filtering expression utilized to find a document that will be used as a base for operation |
options | MoreLikeThisOptions |
Non-default options that should be used for operation |
Options
public int? MinimumTermFrequency { get; set; } = 2;
public int? MaximumQueryTerms { get; set; } = 25;
public int? MaximumNumberOfTokensParsed { get; set; } = 5000;
public int? MinimumWordLength { get; set; } = 0;
public int? MaximumWordLength { get; set; } = 0;
public int? MinimumDocumentFrequency { get; set; } = 5;
public int? MaximumDocumentFrequency { get; set; } = int.MaxValue;
public int? MaximumDocumentFrequencyPercentage { get; set; }
public bool? Boost { get; set; } = false;
public float? BoostFactor { get; set; } = 1;
public string StopWordsDocumentId { get; set; }
public string[] Fields { get; set; }
Options | ||
---|---|---|
MinimumTermFrequency | int? | Ignores terms with less than this frequency in the source doc |
MaximumQueryTerms | int? | Returns a query with no more than this many terms |
MaximumNumberOfTokensParsed | int? | The maximum number of tokens to parse in each example doc field that is not stored with TermVector support |
MinimumWordLength | int? | Ignores words less than this length or, if 0, then this has no effect |
MaximumWordLength | int? | Ignores words greater than this length or if 0 then this has no effect |
MinimumDocumentFrequency | int? | Ignores words which do not occur in at least this many documents |
MaximumDocumentFrequency | int? | Ignores words which occur in more than this many documents |
MaximumDocumentFrequencyPercentage | int? | Ignores words which occur in more than this percentage of documents |
Boost | bool? | Boost terms in query based on score |
BoostFactor | float? | Boost factor when boosting based on score |
StopWordsDocumentId | string | Document ID containing custom stop words |
Fields | string[] | Fields to compare |
Example I
// Search for similar articles to 'articles/1'
// using 'Articles/MoreLikeThis' index and search only field 'Body'
List<Article> articles = session
.Query<Article>("Articles/MoreLikeThis")
.MoreLikeThis(builder => builder
.UsingDocument(x => x.Id == "articles/1")
.WithOptions(new MoreLikeThisOptions
{
Fields = new[] { "Body" }
}))
.ToList();
// Search for similar articles to 'articles/1'
// using 'Articles/MoreLikeThis' index and search only field 'Body'
List<Article> articles = await asyncSession
.Query<Article>("Articles/MoreLikeThis")
.MoreLikeThis(builder => builder
.UsingDocument(x => x.Id == "articles/1")
.WithOptions(new MoreLikeThisOptions
{
Fields = new[] { "Body" }
}))
.ToListAsync();
from index 'Articles/MoreLikeThis'
where morelikethis(id() = 'articles/1', '{ "Fields" : [ "Body" ] }')
Example II
// Search for similar articles to 'articles/1'
// using 'Articles/MoreLikeThis' index and search only field 'Body'
// where article category is 'IT'
List<Article> articles = session
.Query<Article>("Articles/MoreLikeThis")
.MoreLikeThis(builder => builder
.UsingDocument(x => x.Id == "articles/1")
.WithOptions(new MoreLikeThisOptions
{
Fields = new[] { "Body" }
}))
.Where(x => x.Category == "IT")
.ToList();
// Search for similar articles to 'articles/1'
// using 'Articles/MoreLikeThis' index and search only field 'Body'
// where article category is 'IT'
List<Article> articles = await asyncSession
.Query<Article>("Articles/MoreLikeThis")
.MoreLikeThis(builder => builder
.UsingDocument(x => x.Id == "articles/1")
.WithOptions(new MoreLikeThisOptions
{
Fields = new[] { "Body" }
}))
.Where(x => x.Category == "IT")
.ToListAsync();
from index 'Articles/MoreLikeThis'
where morelikethis(id() = 'articles/1', '{ "Fields" : [ "Body" ] }') and Category == 'IT'
Remarks
Do not forget to add the following using statement which contains necessary extensions:
using Raven.Client.Documents;