2012-05-22 67 views
2

獲取ravendb中的「動物園」文檔列表,每個文檔都有一個用於建立年份的字段和一個用於描述的字段。描述是一個字符串,除了其他信息外,還將包括許多可以在動物園中看到的動物。使用ravendb/lucene進行自然語言查詢

(1)如何獲取「黑猩猩和猩猩」或「非狐猴」的用戶搜索值以及搜索動物園的描述。

(2)如何能我做同樣的搜索,但在10年內的1920

建立所有動物園(3)我怎樣才能做到以下幾點鄰近搜索:「黑猩猩猩猩」〜3和大象。

爲了這個問題的目的,不要擔心單數或複數形式的動物名稱。假設他們將是複數。

編輯:我希望下面的測試返回零分的結果,而是返回兩個:

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

回答

0

鮑拉, 你可以從字面上只是運行此查詢。 RavenDB在封面下使用Lucene,並向外公開查詢。 這意味着你可以運行這樣的查詢。這在使用Session.Advanced.LuceneQuery的API中公開。

需要注意的一件事是,我們不支持默認字段,因此您需要指定您所指的字段,但這是關於它的。

+0

除了我不能完全得到它的工作。請參閱我上面的測試。我希望它返回零結果,而它會返回兩個動物園。 – balazs

+0

Per Oren在其他地方的回覆: 這不是AND搜索。這是: string searchPhrase = @「描述:lizards AND描述:orangutans」; var matchingZoos = session.Advanced.LuceneQuery (「DescriptionIndex」)。其中(searchPhrase)。 – balazs