Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search RavenDB全文搜索_Search_Ravendb_Full Text Search - Fatal编程技术网

Search RavenDB全文搜索

Search RavenDB全文搜索,search,ravendb,full-text-search,Search,Ravendb,Full Text Search,您能告诉我如何在RavenDb中执行简单的全文搜索吗。数据库存储在以下文档中:Movie{Name=“Carribean的海盗”}。我希望本文档可以在搜索短语“Pirates Carribean”或任何其他单词组合中找到。您所担心的与全文无关-默认情况下Lucene以or为基础工作,您需要的是and 如果我是你,我会的 String[] terms = searchTerm.Split(" "); // Or whatever the string.split method is 及 您的索

您能告诉我如何在RavenDb中执行简单的全文搜索吗。数据库存储在以下文档中:Movie{Name=“Carribean的海盗”}。我希望本文档可以在搜索短语“Pirates Carribean”或任何其他单词组合中找到。

您所担心的与全文无关-默认情况下Lucene以or为基础工作,您需要的是and

如果我是你,我会的

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

您的索引应该类似于

 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);
    }
公共类电影\u名称:AbstractIndexCreationTask
{
公共重写IndexDefinition CreateIndexDefinition()
{
返回新的IndexDefinitionBuilder
{
Map=电影=>电影中的电影
选择新{movie.Name,market.Id},
索引=
{
{x=>x.Name,FieldIndexing.Analyzed}
}
}
.ToIndexDefinition(DocumentStore.Conventions);
}
您不需要存储,任何时候都不会直接从lucene请求数据。您甚至可能不需要索引(您可能实际上需要FieldIndexing.Analysis,并且可能不需要在此处使用动态查询)

不过由你决定。

鲍里斯, Rob的答案有正确的索引,但查询起来有点笨拙。您可以使用以下方法进行查询:

 session.Query<Movie, Movie_ByName>()
         .Search(x=>x.Name, searchTerms)
         .ToList()
session.Query()
.Search(x=>x.Name,searchTerms)
托利斯先生()
这将

以下是我如何实现“安定”术语搜索的

首先,确保对字段进行了索引和分析:

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

        Index(x => x.MyTextField, FieldIndexing.Analyzed);
    }
}
公共类MyIndex:AbstractIndexCreationTask
{
公共索引()
{
Map=docs=>来自文档中的d
选择新建{d.MyTextField};
索引(x=>x.MyTextField,fieldindex.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));
var query=session.query();
query=搜索文本
.Split(新[]{”“},StringSplitOptions.RemoveEmptyEntries)
.聚合(查询,(q,术语)=>
q、 搜索(x=>x.MyTextField,term,options:SearchOptions.And));

或searchTerm.Replace(“,”和”),尽管您可能希望对空条目和所有这些内容保持警惕。市场/市场文本是否是复制粘贴时留下的?是的,我用另一个问题作为示例,电影变量从何而来?@RonnieOverby,当时他被熊吃掉了。
   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));