Вопрос

Можете ли вы рассказать, как выполнить простой текстовый поиск в Ворота. Отказ База данных хранится документ: Фильм {name = "пираты карибского языка"}. Отказ Я желаю, чтобы этот документ был найден в поисковой фразе «Пираты Carribean» или любая другая комбинация слов.

Это было полезно?

Решение

То, что вы беспокоитесь о том, что нечего делать с полным текстом - по умолчанию Lucene работает на или основе, а что вы хотите, и

Если бы я был тобой, я бы сделал

 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);
    }

Вам не нужно хранить, вы не запрашиваете данные из Луси непосредственно в любое время. Вы можете даже не хотеть индекс (вы действительно можете нужны Fieldindexing.Analyzed, и может уйти с использованием динамических запросов здесь)

До вас, хотя.

Другие советы

Борис, ответ Роб имеет правильный индекс, но это немного неловко для запроса. Вы можете сделать это, используя:

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

Что будет

Вот как я достиг «и будущего» срока поиска.

Во-первых, убедитесь, что ваше поле проиндексировано и проанализировано:

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