字段映射
个别字段映射
默认情况下,JanusGraph 会对属性键进行编码,以在混合索引中为属性键生成唯一的字段名。如果直接在外部索引后端查询混合索引,可能会难以处理且不可读。对于这种情况,可以通过参数明确指定字段名。
mgmt = graph.openManagement()
name = mgmt.makePropertyKey('bookname').dataType(String.class).make()
mgmt.buildIndex('booksBySummary', Vertex.class).addKey(name, Parameter.of('mapped-name', 'bookname')).buildMixedIndex("search")
mgmt.commit()
通过将此字段映射定义为参数,JanusGraph 将在外部索引系统创建的 booksBySummary 索引中为字段使用与属性键相同的名称。请注意,必须确保给定字段名在索引中是唯一的。
全局字段映射
除了单独调整添加到混合索引的每个键的字段映射外,还可以指示 JanusGraph 始终将外部索引中的字段名设置为与属性键名相同。这可以通过启用配置选项 map-name 来实现,该选项是按索引后端配置的。如果为特定的索引后端启用了此选项,则针对该后端定义的所有混合索引都将使用与属性键名相同的字段名。
然而,这种方法有两个限制:1) 用户必须确保属性键名对于索引后端是有效的字段名;2) 重命名属性键不会重命名索引中的字段名,这可能导致用户必须注意并避免的命名冲突。
请注意,如上所述的单独字段映射可用于覆盖特定键的默认名称。
自定义分析器
默认情况下,JanusGraph 将对具有 Mapping.TEXT 的属性使用索引后端中的默认分析器,对具有 Mapping.STRING 的属性不使用分析器。如果想使用其他分析器,可以通过参数明确指定:Mapping.TEXT 的 ParameterType.TEXT_ANALYZER 和 Mapping.STRING 的 ParameterType.STRING_ANALYZER。
适用于 Elasticsearch
分析器的名称必须设置为参数值。
mgmt = graph.openManagement()
string = mgmt.makePropertyKey('string').dataType(String.class).make()
text = mgmt.makePropertyKey('text').dataType(String.class).make()
textString = mgmt.makePropertyKey('textString').dataType(String.class).make()
mgmt.buildIndex('string', Vertex.class).addKey(string, Mapping.STRING.asParameter(), Parameter.of(ParameterType.STRING_ANALYZER.getName(), 'standard')).buildMixedIndex("search")
mgmt.buildIndex('text', Vertex.class).addKey(text, Mapping.TEXT.asParameter(), Parameter.of(ParameterType.TEXT_ANALYZER.getName(), 'english')).buildMixedIndex("search")
mgmt.buildIndex('textString', Vertex.class).addKey(text, Mapping.TEXTSTRING.asParameter(), Parameter.of(ParameterType.STRING_ANALYZER.getName(), 'standard'), Parameter.of(ParameterType.TEXT_ANALYZER.getName(), 'english')).buildMixedIndex("search")
mgmt.commit()
通过这些设置,JanusGraph 将对属性键 string 使用 standard 分析器,对属性键 text 使用 english 分析器。
适用于 Solr
分词器的类名必须设置为参数值。
mgmt = graph.openManagement()
string = mgmt.makePropertyKey('string').dataType(String.class).make()
text = mgmt.makePropertyKey('text').dataType(String.class).make()
mgmt.buildIndex('string', Vertex.class).addKey(string, Mapping.STRING.asParameter(), Parameter.of(ParameterType.STRING_ANALYZER.getName(), 'org.apache.lucene.analysis.standard.StandardTokenizer')).buildMixedIndex("search")
mgmt.buildIndex('text', Vertex.class).addKey(text, Mapping.TEXT.asParameter(), Parameter.of(ParameterType.TEXT_ANALYZER.getName(), 'org.apache.lucene.analysis.core.WhitespaceTokenizer')).buildMixedIndex("search")
mgmt.commit()
通过这些设置,JanusGraph 将对属性键 string 使用 standard 分词器,对属性键 text 使用 whitespace 分词器。
适用于 Lucene
分析器的名称必须设置为参数值,否则对于 Mapping.STRING 默认为 KeywordAnalyzer,对于 Mapping.TEXT 默认为 StandardAnalyzer。
mgmt = graph.openManagement()
string = mgmt.makePropertyKey('string').dataType(String.class).make()
text = mgmt.makePropertyKey('text').dataType(String.class).make()
name = mgmt.makePropertyKey('name').dataType(String.class).make()
document = mgmt.makePropertyKey('document').dataType(String.class).make()
mgmt.buildIndex('string', Vertex.class).addKey(string, Mapping.STRING.asParameter(), Parameter.of(ParameterType.STRING_ANALYZER.getName(), org.apache.lucene.analysis.core.SimpleAnalyzer.class.getName())).buildMixedIndex("search")
mgmt.buildIndex('text', Vertex.class).addKey(text, Mapping.TEXT.asParameter(), Parameter.of(ParameterType.TEXT_ANALYZER.getName(), org.apache.lucene.analysis.en.EnglishAnalyzer.class.getName())).buildMixedIndex("search")
mgmt.buildIndex('name', Vertex.class).addKey(string, Mapping.STRING.asParameter()).buildMixedIndex("search")
mgmt.buildIndex('document', Vertex.class).addKey(text, Mapping.TEXT.asParameter()).buildMixedIndex("search")
mgmt.commit()
通过这些设置,JanusGraph 将对属性键 string 使用 SimpleAnalyzer 分析器,对属性键 text 使用 EnglishAnalyzer 分析器,对属性 name 使用 KeywordAnalyzer 分析器,对属性 'document' 使用 StandardAnalyzer 分析器。
自定义参数
有时需要在映射上设置额外的参数(除了映射类型、映射名称和分析器)。例如,当我们想使用不同的相似度算法(修改全文搜索的评分算法)或者我们想在 Elasticsearch 中对某些字段使用自定义提升时,我们可以设置自定义参数(目前只有 Elasticsearch 支持自定义参数)。自定义参数的名称必须通过 ParameterType.customParameterName("yourProperty") 设置。
适用于 Elasticsearch
mgmt = graph.openManagement()
myProperty = mgmt.makePropertyKey('my_property').dataType(String.class).make()
mgmt.buildIndex('custom_property_test', Vertex.class).addKey(myProperty, Mapping.TEXT.asParameter(), Parameter.of(ParameterType.customParameterName("boost"), 5), Parameter.of(ParameterType.customParameterName("similarity"), "boolean")).buildMixedIndex("search")
mgmt.commit()
通过这些设置,JanusGraph 将对属性键 my_property 使用 boost 5 和布尔相似度算法。可能的映射参数取决于 Elasticsearch 版本。有关当前 Elasticsearch 版本的 映射参数,请参阅。