Raven查询返回0包含的结果

时间:2012-05-01 00:16:58

标签: ravendb

我有一个基本架构

Post {
    Labels: [
        { Text: "Mine" }
        { Text: "Incomplete" }
    ]
}

我正在查询乌鸦,要求所有帖子都标有“我的”和“不完整”的标签。

queryable.Where(candidate => candidate.Labels.Any(label => label.Text == "Mine"))
    .Where(candidate => candidate.Labels.Any(label => label.Text == "Incomplete"));

这会产生一个乌鸦查询(来自Raven服务器控制台)

Query: (Labels,Text:Incomplete) AND (Labels,Text:Mine)
Time: 3 ms
Index: Temp/XWrlnFBeq8ENRd2SCCVqUQ==
Results: 0 returned out of 0 total.

这是为什么?如果我查询JUST包含“Incomplete”,我得到1个结果。 如果我查询JUST包含“我的”,我得到相同的结果 - 那么为什么我在哪里查询它们,我得到0结果?

编辑:

好的 - 所以我进一步了。 “自动生成的索引”看起来像这样

from doc in docs.FeedAnnouncements
from docLabelsItem in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
select new { CreationDate = doc.CreationDate, Labels_Text = docLabelsItem.Text }

所以,我认为该查询基本上是针对2个不同的值测试SAME标签。坏。

我把它更改为:

from doc in docs.FeedAnnouncements
from docLabelsItem1 in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
from docLabelsItem2 in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
select new { CreationDate = doc.CreationDate, Labels1_Text = docLabelsItem1.Text, Labels2_Text = docLabelsItem2.Text }

现在我的查询(在Raven Studio中)Labels1_Text:Mine AND Labels2_Text:Incomplete工作!

但是,在从Linq查询时,如何处理这些幻像字段(Labels1_Text和Labels2_Text)?

1 个答案:

答案 0 :(得分:1)

亚当 你有正确的理由。默认索引将生成2个索引条目,并且您的查询正在单个索引条目上执行。

你想要的是使用交集,或者像这样创建你自己的索引:

from doc in docs.FeedAnnouncements
select new { Labels_Text = doc.Labels.Select(x=>x.Text)}

这会在单个索引条目中为您提供所有标签的文本,您可以在其中执行查询。