c#实现了raven db全文搜索的部分word

本文关键字:搜索 word 实现 raven db 文搜索 | 更新日期: 2023-09-27 18:09:18

我有一个网格,我需要支持全文搜索。我不仅需要支持按开头和结尾进行搜索,还需要支持按单词部分进行搜索。例如,如果我有"MyWord",我需要搜索将找到的部分"word"。如果我尝试使用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数据库索引并将字段标记为已分析,则包含不工作。它适用于StartWith()和EndWith(),但不适用于contains。使用. search()我得到相同的结果。另一个选择是使用lucene语法:

.Where("Name:*partOfWord*")

,它工作得很好,但我不想把linq和lucene语法结合起来,我想用raven数据库索引来解决它。

你有什么想法如何实现全文搜索raven数据库使用索引?

c#实现了raven db全文搜索的部分word

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

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

我使用这个查询通过键入姓名的一部分来搜索人员的全名。建议设置搜索字符串的最小长度

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