سؤال

هل يمكنك إخبار كيفية إجراء البحث الكامل البسيط في Ravendb. تم تخزين قاعدة البيانات المستند: فيلم {name = "Pirates of the Carribean"}. أتمنى أن تم العثور على هذا المستند في عبارة البحث "Pirates Carribean" أو أي مجموعة أخرى من الكلمات.

هل كانت مفيدة؟

المحلول

ما تقلقه ليس له علاقة بالنص الكامل - بشكل افتراضي يعمل لوسين على أساس أو على أساس وما تريده هو و

لو كنت أنت سأفعل

 String[] terms = searchTerm.Split(" "); // Or whatever the string.split method is

و

  .Where("Name:(" + String.Join(" AND ", terms) + ")");

يجب أن يبدو الفهرس الخاص بك شيء مثل

 public class Movie_ByName : AbstractIndexCreationTask
 {
    public override IndexDefinition CreateIndexDefinition()
    {
        return new IndexDefinitionBuilder<Movie>
                   {
                       Map = movies => from movie in movies
                                        select new { movie.Name, market.Id },

                       Indexes =
                           {
                               {x => x.Name, FieldIndexing.Analyzed}
                           }
                   }
            .ToIndexDefinition(DocumentStore.Conventions);
    }

لا تحتاج إلى تخزين ، فأنت لا تطلب البيانات من Lucene مباشرة في أي وقت. قد لا ترغب حتى في فهرس (قد ترغب بالفعل في الحصول على FieldIndexing.

متروك لك رغم ذلك.

نصائح أخرى

بوريس ، إجابة روب لها الفهرس الصحيح ، لكنه محرج بعض الشيء للاستعلام. يمكنك القيام بذلك باستخدام:

 session.Query<Movie, Movie_ByName>()
         .Search(x=>x.Name, searchTerms)
         .ToList()

ذلك سوف

إليكم كيف حققت بحثًا عن مصطلح "Anding".

أولاً ، تأكد من فهرسة حقلك وتحليله:

public class MyIndex: AbstractIndexCreationTask<MyDocument>
{
    public MyIndex()
    {
        Map = docs => from d in docs
                      select new { d.MyTextField  };

        Index(x => x.MyTextField, FieldIndexing.Analyzed);
    }
}

ثم الاستعلام من العميل:

   var query = session.Query<MyDocument, MyIndex>();

    query = theSearchText
                .Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries)
                .Aggregate(query, (q, term) =>
                     q.Search(x => x.MyTextField, term, options: SearchOptions.And));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top