C#实现了raven db全文搜索的部分单词

时间:2013-04-14 12:09:28

标签: c# linq full-text-search ravendb contains

我有一个网格,我需要支持全文搜索。我需要支持搜索,不仅仅是从开头和结束,但我需要支持搜索的部分单词。例如,如果我有“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 index并将字段标记为Analyzed,则包含不起作用。它适用于StartWith()和EndWith(),但不适用于contains。使用.Search()我得到了相同的结果。另一种选择是使用lucene语法:

.Where("Name:*partOfWord*")

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我使用此查询只需键入名称的一部分即可搜索人名。建议设置搜索字符串的最小长度。

.Search(x => x.Name, "word to search" + "*", escapeQueryOptions: EscapeQueryOptions.AllowPostfixWildcard)