1

ドキュメントエンティティStudentがあります

public class Student
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
}

FirstNameプロパティをブーストしたStudent_ByNameというインデックスがあります。

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' }

次に、以下のクエリは、Davidがリストの一番上にある名である行をプロモートしません。

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のブーストを機能させるにはどうすればよいかということです。

4

1 に答える 1

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();
于 2012-04-18T03:34:19.000 に答える