我正在开发 Solr 4+。
我的 solr 模式中有多个具有不同 solr 字段类型的字段。
文本字段和字符串字段的搜索是否不同?
因为我正在尝试搜索字符串字段(这是几个方面字段的复制字段),但它无法按预期工作。目标字符串字段被索引并存储。
但是,当我将目标字段更改为文本字段(仅索引)时,它工作正常。
您能说明为什么会发生这种情况吗? solr 中的文本字段和字符串字段在搜索方面到底有什么区别?
TextFields
通常附有分词器和文本分析,这意味着索引内容被分解为单独的标记,无需精确匹配 - 每个单词/标记可以单独匹配,以决定是否应包含整个文档在回复中。
StrFields
无法应用任何标记化或分析/过滤器,并且只会给出完全匹配的结果。如果您需要应用分析或过滤器的 StrField,您可以使用 TextField
和 KeywordTokenizer
来实现。
具有合理、通用的跨语言默认值的通用文本字段:它使用 StandardTokenizer 进行标记,从不区分大小写的“stopwords.txt”中删除停用词(默认为空),并忽略大小写。仅在查询时,它还应用同义词。
不分析 StrField 类型,而是逐字索引/存储。
Solr 模型默认定义的字段有很大不同。
在不使用
tokenization
或其他过程的情况下,字符串可以准确地保存单词或句子。通常有助于分面,例如存储精确匹配。
分词和二次处理(如小写等)通常通过文本来处理。在我们需要匹配句子的部分内容的任何情况下都很有用。
如果两个字段都有示例
"This is a sample sentence"
索引,我们需要查找精确的内容。对于文本字段中的命中,搜索 sample
甚至启用了词干提取的样本可能就足够了。 “This is a sample sentence"
在字符串字段中获得命中。