【发布时间】:2015-03-15 00:26:32
【问题描述】:
我正在使用 Solr 4.10.2。我已经构建了索引文档。在 Schema.xml 中,我删除了 ID 字段并将其替换为 ngram 字段并将 ngram 字段设为 唯一键。
我有一个问题 - 我什么时候会在 Solr 上进行 搜索 查询。搜索的性能会伤害吗?它还会影响 Document 缓存。
【问题讨论】:
标签: performance solr indexing unique-key
我正在使用 Solr 4.10.2。我已经构建了索引文档。在 Schema.xml 中,我删除了 ID 字段并将其替换为 ngram 字段并将 ngram 字段设为 唯一键。
我有一个问题 - 我什么时候会在 Solr 上进行 搜索 查询。搜索的性能会伤害吗?它还会影响 Document 缓存。
【问题讨论】:
标签: performance solr indexing unique-key
不,我认为这不会影响 Solr 的性能。当您将自己的字段定义为 uniqueKey 时,它将根据给定的键索引文档。我在我的一个项目中使用了相同的方法,我们使用 documentId 作为 uniqueKey。
【讨论】:
使用 ngram 字段作为唯一键是一个非常糟糕的主意。唯一键字段不能是“标记化”类型,否则多个单独的标记组成一个键,这将导致误报匹配。您应该只使用字符串或 int/long 字段类型作为唯一键的类型。
当然,性能也会受到一定影响,因为 ngram 字段会创建许多标记而不是一个,但与误报和重复文档等其他问题相比,这可以忽略不计。
【讨论】:
@Shalin。实际上,我的 ngram 字段不是字符串类型。我已经定义了自己的 fieldType="textSpell",其中包含两行 <tokenizer class="solr.StandardTokenizerFactory"/> 和 <filter class="solr.ShingleFilterFactory" maxShingleSize="3" minShingleSize="2" outputUnigrams="true"/>。现在,请告诉我它会降低性能吗?