这与我询问的关于如何不使用动态查询的另一篇文章相反,但是为了准备我可能需要的想法,我试图了解更多。
我的情况是有时我想要分析一个字段,有时我不这样做。我现在通过两个单独的索引来解决这个问题。
/// <summary>
/// Query for an entity by its identity or name, using full indexing to search for specific parts of either.
/// </summary>
public class [ENTITY]__ByName : AbstractIndexCreationTask<[ENTITY]> {
public [ENTITY]__ByName() {
Map = results => from result in results
select new {
Id = result.Id,
Name = result.Name
};
Index(n => n.Name, FieldIndexing.Analyzed);
}
}
/// <summary>
/// Query for an entity by its full name, or full identity without any analyzed results, forcing
/// all matches to be absolutely identical.
/// </summary>
public class [ENTITY]__ByFullName : AbstractIndexCreationTask<[ENTITY]> {
public [ENTITY]__ByFullName() {
Map = results => from result in results
select new {
Id = result.Id,
Name = result.Name
};
}
}
然而,我被告知我应该使用&#34;动态索引&#34; (这对我来说无法达到索引的目的,但这个评论来自一位我非常尊重的高级开发人员,所以我很有意思)
所以,我需要弄清楚如何将我在分析器中的偏好传递给动态查询。现在我的查询看起来像......
RavenQueryStatistics statistics;
var query = RavenSession
.Query<[ENTITY], [INDEX]>()
.Customize(c => c.WaitForNonStaleResultsAsOfNow())
.Statistics(out statistics)
.Search(r => r.Name, [name variable])
.Skip((request.page - 1) * request.PageSize)
.Take(request.PageSize)
.ToList();
var totalResults = statistics.TotalResults;
好吧,既然我被告知有这么多索引并不是我应该做的事情,我需要去动态查询吗?所以它更像是......?
RavenQueryStatistics statistics;
var query = RavenSession
.Query<[ENTITY]>()
.Customize(c => c.WaitForNonStaleResultsAsOfNow())
.Statistics(out statistics)
.Search(r => r.Name, [name variable])
.Skip((request.page - 1) * request.PageSize)
.Take(request.PageSize)
.ToList();
var totalResults = statistics.TotalResults;
但问题是有时我想要一个Analyzer
- 有时我不想。例如......
在6000个结果的网格上,如果用户进行&#34;搜索&#34;对于One
,我希望它能够找到名称中One
任何地方的所有内容。分析仪允许这样做。
在验证程序上,旨在确保用户不会添加与另一个实体完全相同的新实体,我不希望这样的灵活性。如果用户输入Item Number
作为名称,并且Item Number 2
存在,我不希望它匹配,因为一个或两个单词匹配。如果他们输入完全相同的单词,我希望它匹配。
那么,有没有办法将其合并到dynamic
个查询中?或者我很聪明地继续使用不同的查询?