1

我有一个网格,我需要支持全文搜索。我不仅需要以开头和结尾来支持搜索,而且还需要支持单词部分的搜索。例如,如果我有“MyWord”,我需要通过“wor”部分找到该搜索。如果我尝试使用 string.contains() 我会收到以下错误:

Contains is not supported, doing a substring match over a text field is a very slow operation, and is not allowed using the Linq API.
The recommended method is to use full text search (mark the field as Analyzed and use the Search() method to query it.

如果我构建 raven db 索引并将字段标记为已分析,则包含不起作用。它适用于 StartWith() 和 EndWith(),但不适用于包含。使用 .Search() 我得到了相同的结果。另一种选择是使用 lucene 语法:

.Where("Name:*partOfWord*")

它工作正常,但我不想将 linq 与 lucene 语法结合起来,我想使用 raven db 索引来解决它。

您对如何使用索引实现 raven db 的全文搜索有任何想法吗?

4

2 回答 2

2

您想使用 NGram 分析器,如此所述。它是一个分析器,您可以通过将其 DLL 放到 Analyzers 文件夹中来将其添加到 RavenDB 服务器。

您真的不想执行任何 *substr Lucene 查询(即“以”结尾的子句),因为性能很糟糕。编码风格的不一致是一个较小的问题。

于 2013-04-14T12:13:42.430 回答
1

我使用这个查询来搜索人的全名,只需输入姓名的一部分。建议设置搜索字符串的最小长度。

.Search(x => x.Name, "word to search" + "*", escapeQueryOptions: EscapeQueryOptions.AllowPostfixWildcard)
于 2013-04-14T12:29:21.837 回答