2

获取 ravendb 中的“动物园”文档列表,每个文档都有一个字段用于建立年份和一个字段用于描述。描述是一个字符串,除其他信息外,还包括该动物园可以看到的许多动物。

(1) 如何获取“黑猩猩和猩猩或“大猿”而不是狐猴的用户搜索值并在动物园中搜索描述。

(2) 除了对 1920 年 10 年内建立的所有动物园外,我如何进行相同的搜索。

(3) 如何进行以下邻近搜索:“黑猩猩猩猩”~3 AND 大象。

就这个问题而言,不要担心动物名称的单数或复数形式。假设它们将是复数。

编辑:我希望以下测试返回零结果,而是返回两个:

    public void LuceneANDQuery()
    {
        var zoosToCreate = new List<Zoo>
                               {
                                   new Zoo()
                                       {
                                           Description = "We have alligators, orangutans and chimpanzees",
                                           AbbreviatedState = "DC"
                                       },
                                   new Zoo()
                                       {Description = "We have orangutans and elephants", AbbreviatedState = "CA"}
                               };
        using (var session = documentStore.OpenSession())
        {
            zoosToCreate.ForEach(session.Store);
            session.SaveChanges();
            new DescriptionIndex().Execute(documentStore);
            string searchPhrase = @"lizards && orangutans";
            var matchingZoos = session.Advanced.LuceneQuery<Zoo>("DescriptionIndex").Search("Description", searchPhrase).
                WaitForNonStaleResultsAsOfNow().ToList();
            int matchingZoosCount = matchingZoos.Count;
            Assert.AreEqual(matchingZoosCount, 0);
        }
    }

    public class DescriptionIndex : AbstractIndexCreationTask<Zoo>
    {
        public DescriptionIndex()
        {
            Map = zoos => from zoo in zoos
                          select new {zoo.Description};
            Analyzers.Add(z => z.Description, "Lucene.Net.Analysis.Standard.StandardAnalyzer");
            Indexes.Add(z => z.Description, FieldIndexing.Analyzed);
        }
    }
4

1 回答 1

0

Balazs,你可以直接运行这个查询。RavenDB 在后台使用 Lucene,并将其查询向外暴露。这意味着您可以只运行这样的查询。这在 API 中使用 Session.Advanced.LuceneQuery 公开。

需要注意的一点是,我们不支持默认字段,因此您需要指定您的意思的字段,但仅此而已。

于 2012-05-22T20:07:34.970 回答