RavenDB全文搜索

Bor*_*nko 10 search full-text-search ravendb

您能否告诉我如何在RavenDb中执行简单的全文搜索.数据库存储文件:Movie {Name ="Pirates of the Carribean"}.我希望在搜索短语"Pirates Carribean"或任何其他单词组合中找到此文档.

Aye*_*ien 16

鲍里斯,罗布的答案有正确的索引,但查询有点尴尬.你可以这样做:

 session.Query<Movie, Movie_ByName>()
         .Search(x=>x.Name, searchTerms)
         .ToList()
Run Code Online (Sandbox Code Playgroud)

那会的

  • @RonnieOverby那是他被熊吃掉的那一刻. (26认同)
  • 感谢您的答复. (5认同)

Rob*_*ton 12

你担心的是与全文无关 - 默认情况下,Lucene在OR的基础上工作,你想要的是一个AND

如果我是你,我会这样做

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

  .Where("Name:(" + String.Join(" AND ", terms) + ")");
Run Code Online (Sandbox Code Playgroud)

你的索引看起来应该是这样的

 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);
    }
Run Code Online (Sandbox Code Playgroud)

您不需要存储,您不会直接从lucene请求数据.你可能甚至不想要一个索引(你可能真的想要FieldIndexing.Analyzed,并且可能只是在这里使用动态查询)

尽管如此.