我有一个基本的架构
Post {
Labels: [
{ Text: "Mine" }
{ Text: "Incomplete" }
]
}
我正在查询raven,要求所有带有“ Mine”和“ 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.
为什么是这样?如果查询仅包含“不完整”的内容,则会得到1个结果。
如果查询仅包含“ Mine”的结果,我将得到相同的结果-因此为什么要在这两个查询中都得到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)?
最佳答案
亚当,
你说对了。默认索引将生成2个索引条目,并且您的查询正在单个索引条目上执行。
您想要的是使用交集,或创建自己的索引,如下所示:
from doc in docs.FeedAnnouncements
select new { Labels_Text = doc.Labels.Select(x=>x.Text)}
这样一来,您就可以在单个索引条目中获得所有标签的文本,您可以在上面执行查询。
关于ravendb - Raven查询返回0个结果,用于包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10392119/