RavenDB 是否对查询进行标记化和过滤?

问题描述 投票:0回答:1

如果在 RavenDB 中定义一个字段用于全文搜索,它会使用一个分析器来标记该字段并进行后处理(source)。如果现在查询该字段,查询中的搜索词会发生什么?它也被标记化和后处理吗?如果是,它是否由索引期间使用的同一分析器进行标记化和后处理?用于索引和查询的分析器可以不同吗?

一个例子:

收藏:

{"Name": "xxxabcd", "@metadata": {"@collection": "Names"}}
{"Name": "yyyabcd", "@metadata": {"@collection": "Names"}}

索引:

from names in docs.Names
select new {
    names.Name
}

将名称字段上的

Indexing
激活为
Search
并使用 NGram 分析器(不知道如何在 RQL 中执行此操作)。 NGram 根据名称创建 2-6 个字符长的标记 (source)。因此,一个令牌将是
abcd
,它由两个文档共享。

查询:

from index "Names/ByName" 
where search(Name, "xxxabcd")

查询仅返回

xxxabcd
。 如果搜索词被后处理为
abcd
的 NGram,它将返回两个文档,但事实并非如此。那么搜索词
xxxabcd
发生了什么?

我找不到任何有关如何处理全文字段上的搜索词的文档。

ravendb
1个回答
0
投票

索引定义中配置的分析器在索引时和查询时运行(同一个分析器)。

来自:

https://ravendb.net/learn/inside-ravendb-book/reader/4.0/10-static-indexes-and-other-advanced-options#full-text-search-analysis

需要注意的是,分析器在索引和索引期间运行 在查询时间内。这样,最终查询到的实际索引是什么呢 数据结构是通过分析器传递的值 在查询期间并与通过传递的值进行比较 索引期间的分析器。

© www.soinside.com 2019 - 2024. All rights reserved.