使用ravendb / lucene进行自然语言查询

时间:2012-05-22 13:37:30

标签: lucene ravendb

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

(1)如何获取"黑猩猩和猩猩的用户搜索值OR"类人猿"不是狐猴"并搜索动物园以获取描述。

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

1 个答案:

答案 0 :(得分:0)

的Balazs, 你可以简单地运行这个查询。 RavenDB在封面下使用Lucene,并向外暴露其查询。 这意味着您可以像这样运行查询。这是使用Session.Advanced.LuceneQuery在API中公开的。

需要注意的一点是,我们不支持默认字段,因此您需要指定您所指的字段,但这是关于它的。