RavenDB 全文搜索

Posted

技术标签:

【中文标题】RavenDB 全文搜索【英文标题】:RavenDB full-text search 【发布时间】:2011-05-17 21:43:07 【问题描述】:

您能告诉我如何在 RavenDb 中执行简单的全文搜索。数据库存储文档:Movie Name = "Pirates of the Carribean"。我希望在搜索短语“加勒比海盗”或任何其他单词组合中找到此文档。

【问题讨论】:

【参考方案1】:

鲍里斯, Rob 的答案有正确的索引,但是查询起来有点尴尬。你可以这样做:

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

那会

【讨论】:

@RonnieOverby 那是他被熊吃掉的那一刻。【参考方案2】:

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

如果我是你,我会这样做

 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.Analyzed,并且可能只在此处使用动态查询就可以逃脱)

由你决定。

【讨论】:

或 searchTerm.Replace(" ", " AND "),尽管您可能希望对空条目等保持警惕。 市场/市场文本是否会从复制粘贴中遗留下来? 是的,我以另一个问题为例 电影变量从何而来?【参考方案3】:

这是我实现“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));

【讨论】:

以上是关于RavenDB 全文搜索的主要内容,如果未能解决你的问题,请参考以下文章

全文搜索是怎么实现的?

SQL Server中的全文搜索

深入研究查询Elasticsearch,过滤查询和全文搜索

全文搜索引擎有那些、

关于全文搜索elasticsearch中matchQuery和termQuery的区别

关于全文搜索elasticsearch中matchQuery和termQuery的区别