我正在尝试为应用程序实现搜索功能,并且我想制作一个可能需要未知数量的参数/搜索词的查询。
例如,如果我有两个论点,我喜欢这样的事情。 using (IDocumentSession session = RavenDbConfig.RavenDBDocumentStore.OpenSession())
{
var searchresults = session.Query<Contact>()
.Where(x => x.Firstname.StartsWith("searchArgument1") || x.Firstname.StartsWith("searchArgument2"))
.ToList();
}
......等等。
这可能吗?如果没有,如果您不知道用户想要搜索多少搜索字词,您将如何解决问题?
答案 0 :(得分:1)
在枚举之前,您可以在查询中附加更多where子句。我认为你必须使用DocumentQuery&lt;&gt;能够做你想要的(或者可能是Search()功能,不太确定):
using (var session = _documentStore.OpenSession())
{
var query = session.Advanced.DocumentQuery<Contact>()
.WhereStartsWith(x => x.FirstName, "searchArgument1");
if(hasSearchArgument2)
query = query.WhereStartsWith(x => x.FirstName, "searchArgument2");
var contacts = query.ToList();
}
这将返回所有带有以SearchArgument1或searchArgument2开头的FirstName的文档。
在上面的示例中执行的Lucene查询如下所示:
{FirstName:searchArgument1* FirstName:searchArgument2*}
详细了解DocumentQuery&lt;&gt;在这里:http://ravendb.net/docs/article-page/3.0/csharp/indexes/querying/query-vs-document-query
此外,请阅读有关搜索的内容,因为它可能更适合您的情况:http://ravendb.net/docs/article-page/3.0/csharp/indexes/querying/searching
希望这有帮助!