Solr自定义更新请求处理器:UIMA集成
您可以将 Apache 非结构化信息管理体系结构(UIMA)与 Solr 进行集成。通过 UIMA,您可以定义分析引擎(Analysis Engines)的自定义管道,以增量方式将元数据作为注释添加到文档中。
Solr 如何配置 UIMA
SolrUIMA UpdateRequestProcessor 是一个自定义的更新请求处理器,它将文档编入索引,将它们发送到 UIMA 管道,然后返回富集了指定元数据的文档。要为 Solr配置 UIMA,请按照下列步骤操作:
- 将 solr-uima-VERSION.jar(在 /solr-VERSION/dist/ 中)及其库(在 contrib/uima/lib 中)复制到 Solr 库目录中,或者将 solrconfig.xml 中的 <lib/> 标记适当地设置以指向这些 jar 文件:
<lib dir="../../contrib/uima/lib" /> <lib dir="../../dist/" regex="solr-uima-\d.*\.jar" />
- 修改 schema.xml,添加所需的元数据字段,为类型、索引、储和多值选项指定适当的值。例如:
<field name="language" type="string" indexed="true" stored="true" required="false"/> <field name="concept" type="string" indexed="true" stored="true" multiValued="true" required="false"/> <field name="sentence" type="text" indexed="true" stored="true" multiValued="true" required="false" />
- 将以下代码片段添加到 solrconfig.xml 中:
您需要注意以下几点:<updateRequestProcessorChain name="uima"> <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory"> <lst name="uimaConfig"> <lst name="runtimeParameters"> <str name="keyword_apikey">VALID_ALCHEMYAPI_KEY</str> <str name="concept_apikey">VALID_ALCHEMYAPI_KEY</str> <str name="lang_apikey">VALID_ALCHEMYAPI_KEY</str> <str name="cat_apikey">VALID_ALCHEMYAPI_KEY</str> <str name="entities_apikey">VALID_ALCHEMYAPI_KEY</str> <str name="oc_licenseID">VALID_OPENCALAIS_KEY</str> </lst> <str name="analysisEngine">/org/apache/uima/desc/OverridingParamsExtServicesAE.xml</str> <!-- Set to true if you want to continue indexing even if text processing fails. Default is false. That is, Solr throws RuntimeException and never indexed documents entirely in your session. --> <bool name="ignoreErrors">true</bool> <!-- This is optional. It is used for logging when text processing fails. If logField is not specified, uniqueKey will be used as logField. <str name="logField">id</str> --> <lst name="analyzeFields"> <bool name="merge">false</bool> <arr name="fields"> <str>text</str> </arr> </lst> <lst name="fieldMappings"> <lst name="type"> <str name="name">org.apache.uima.alchemy.ts.concept.ConceptFS</str> <lst name="mapping"> <str name="feature">text</str> <str name="field">concept</str> </lst> </lst> <lst name="type"> <str name="name">org.apache.uima.alchemy.ts.language.LanguageFS</str> <lst name="mapping"> <str name="feature">language</str> <str name="field">language</str> </lst> </lst> <lst name="type"> <str name="name">org.apache.uima.SentenceAnnotation</str> <lst name="mapping"> <str name="feature">coveredText</str> <str name="field">sentence</str> </lst> </lst> </lst> </lst> </processor> <processor class="solr.LogUpdateProcessorFactory" /> <processor class="solr.RunUpdateProcessorFactory" /> </updateRequestProcessorChain>
- VALID_ALCHEMYAPI_KEY 是您的 AlchemyAPI 访问密钥。您需要注册一个 AlchemyAPI 访问秘钥以使用 AlchemyAPI 服务,注册地址如下: http : //www.alchemyapi.com/api/register.html。
- VALID_OPENCALAIS_KEY 是您的 Calais 服务密钥(Calais Service Key)。您需要注册 Calais 服务密钥才能使用 Calais 服务,注册地址如下:http : //www.opencalais.com/apikey。
- analysisEngine 必须在类路径的指定路径中包含一个 AE 描述符。
- analyzeFields 必须包含需要由 UIMA 分析的输入字段。如果 merge=true 那么他们的内容将被合并和分析一次。
- 字段映射描述哪些类型的功能应该在字段中进行。
- 在您的 solrconfig.xml 替换现有的默认 UpdateRequestHandler 或创建一个新的 UpdateRequestHandler:
<requestHandler name="/update" class="solr.XmlUpdateRequestHandler"> <lst name="defaults"> <str name="update.chain">uima</str> </lst> </requestHandler>
一旦您完成了配置,您的文档将在索引时自动丰富指定的字段。
有关 Solr UIMA 集成的更多信息,请参阅:https://wiki.apache.org/solr/SolrUIMA。