使用 RavenDB 在一个查询中对同一字段进行全文搜索

本文关键字:字段 文搜索 搜索 RavenDB 一个 使用 查询 | 更新日期: 2023-09-27 18:31:48

我有一个对象,其中包含一个存储在RavenDB中的字符串字段。例如:

public class SomeObject
{
    public string SomeText = "hello world";
}

我希望能够在同一查询中检查以下两项:

  1. 检查整个字符串是否以某个值开头。在这种情况下:
    • "地狱"会匹配
    • "你好"会匹配
    • "你好W"会匹配
    • "世界"不匹配
    • "世界你好"不匹配
  2. 检查字符串是否包含某些术语。假设它们是空格分开的,在这种情况下:
    • "地狱"不匹配
    • "你好"会匹配
    • "你好W"不匹配
    • "世界"将匹配
    • "世界你好"会匹配

设置索引(我假设?)以便能够在同一查询中执行此操作的好方法是什么?

编辑:澄清了我希望能够在同一查询中检查这两件事。

使用 RavenDB 在一个查询中对同一字段进行全文搜索

看看这里。我想你可以做一个Where(n => n.StartsWith(...))Search(...)查询的组合。

我最终将两个字段添加到索引中,这两个字段都基于 SomeText

一个使用StandardAnalyzer进行分析,另一个使用LowerCaseKeywordAnalyzer进行分析。

这使我可以使用LowerCaseKeywordAnalyzer索引的字段进行搜索。如果任何术语以任何内容开头而不是以它开头的整个字符串,则使用由StandardAnalyzer索引的字段将生成命中。

可以使用由StandardAnalyzer索引的字段并行搜索术语。

我不知道这是否是最好的解决方案,但它解决了我的问题。