如果在 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
发生了什么?
我找不到任何有关如何处理全文字段上的搜索词的文档。
索引定义中配置的分析器在索引时和查询时运行(同一个分析器)。
来自:
需要注意的是,分析器在索引和索引期间运行 在查询时间内。这样,最终查询到的实际索引是什么呢 数据结构是通过分析器传递的值 在查询期间并与通过传递的值进行比较 索引期间的分析器。