我有一个文件实体学生
public class Student
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
我有一个索引Student_ByName,在FirstName属性上定义为
public class Student_ByName : AbstractIndexCreationTask<Domain.Student>
{
public Student_ByName()
{
Map = students => from s in students
select new
{
FirstName = s.FirstName.Boost(6),
s.LastName,
s.DateOfBirth,
s.Gender
};
}
}
我有以下学生文档实例
{ FirstName: 'David', LastName: 'Globe', DateOfBirth: '02/04/2000' }
{ FirstName: 'Tyson', LastName: 'David', DateOfBirth: '23/10/2000' }
{ FirstName: 'David', LastName: 'James', DateOfBirth: '19/05/1996' }
然后下面的查询不会提升大道是列表顶部的第一个名称的行。
var students = _session.Query<Domain.Student, Student_ByName>()
.Where(s => s.FirstName.StartsWith('David') ||
s.LastName.StartsWith('David'))
.ToList();
如果我更改Where子句以检查是否相等,那么以David作为名字的行将被提升到列表的顶部
.Where(s => s.FirstName == 'David' || s.LastName == 'David')
.ToList();
我的问题是如何在进行BeginsWith搜索时获得FirstName的提升。
答案 0 :(得分:1)
这是预期的,请参见此处的解释:
http://grokbase.com/t/lucene/java-user/022dzkexc6/prefixquery-scoring
您可以使用以下命令执行此操作(查询时间与评分时间)评分:
var students = session.Advanced.LuceneQuery<Student>()
.WhereStartsWith("FirstName", "David").Boost(3)
.WhereStartsWith("LastName", "David")
.ToList();