dse 搜索 apache uima 集成
dse search apache uima integration
我在 CentOS 7.3.1611 (Core) 上安装了 DSE 5.1 和 solr 6.0.1。并在 eclipse 中为我的注释器项目配置了 UIMA。
我正在关注 Solr 文档:
https://wiki.apache.org/solr/Solr4UIMA
用 UIMA 创建的项目有一个简单的注释器来获取人名,已经在 UIMA 的 CAS Visual Debugger 中运行良好。并且已经在solr lib目录下创建并复制了jar(DSE_HOME/solr/lib)这里还有solr集成uima的jar(SOLR_HOME/contrib/uima/lib,SOLR_HOME/contrib/uima/lucene-lib,SOLR_HOME/dist/solr-uima-version ).
我在 cassandra 中创建的 table 是:
CREATE TABLE uima_solr.person_annotator (
id int PRIMARY KEY,
apellido text,
nombre text,
nombrecompleto text,
solr_query text,
uimaname set<text>
solr 核心使用模式:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
<types>
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType class="org.apache.solr.schema.TrieIntField" name="TrieIntField"/>
</types>
<fields>
<field indexed="true" multiValued="false" name="nombrecompleto" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="apellido" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="nombre" stored="true" type="TextField"/>
<field docValues="true" indexed="true" multiValued="false" name="id" stored="true" type="TrieIntField"/>
<field indexed="true" multiValued="false" name="all" stored="false" type="TextField"/>
<field indexed="true" multiValued="true" name="uimaname" stored="true" type="TextField"/>
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>all</defaultSearchField>
<copyField source="nombrecompleto" dest="all"/>
<copyField source="apellido" dest="all"/>
<copyField source="nombre" dest="all"/>
</schema>
solr_config 如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<config>
<abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
<luceneMatchVersion>LUCENE_6_0_0</luceneMatchVersion>
<dseTypeMappingVersion>2</dseTypeMappingVersion>
<directoryFactory class="solr.StandardDirectoryFactory" name="DirectoryFactory"/>
<indexConfig>
<rt>false</rt>
<useCompoundFile>false</useCompoundFile>
<ramBufferSizeMB>512</ramBufferSizeMB>
<mergeFactor>10</mergeFactor>
<reopenReaders>true</reopenReaders>
<deletionPolicy class="solr.SolrDeletionPolicy">
<str name="maxCommitsToKeep">1</str>
<str name="maxOptimizedCommitsToKeep">0</str>
</deletionPolicy>
<infoStream file="INFOSTREAM.txt">false</infoStream>
</indexConfig>
<jmx/>
<updateHandler class="solr.DirectUpdateHandler2">
<autoSoftCommit>
<maxTime>10000</maxTime>
</autoSoftCommit>
</updateHandler>
<query>
<maxBooleanClauses>1024</maxBooleanClauses>
<filterCache class="solr.SolrFilterCache" highWaterMarkMB="256" lowWaterMarkMB="128"/>
<enableLazyFieldLoading>true</enableLazyFieldLoading>
<useColdSearcher>true</useColdSearcher>
<maxWarmingSearchers>16</maxWarmingSearchers>
</query>
<requestDispatcher handleSelect="true">
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000"/>
<httpCaching never304="true"/>
</requestDispatcher>
<requestHandler class="solr.SearchHandler" default="true" name="search">
<lst name="defaults">
<int name="rows">10</int>
</lst>
</requestHandler>
<requestHandler class="com.datastax.bdp.search.solr.handler.component.CqlSearchHandler" name="solr_query">
<lst name="defaults">
<int name="rows">10</int>
</lst>
</requestHandler>
<!--<requestHandler class="solr.UpdateRequestHandler" name="/update"/>-->
<requestHandler class="solr.UpdateRequestHandler" name="/update/csv" startup="lazy"/>
<requestHandler class="solr.UpdateRequestHandler" name="/update/json" startup="lazy"/>
<requestHandler class="solr.FieldAnalysisRequestHandler" name="/analysis/field" startup="lazy"/>
<requestHandler class="solr.DocumentAnalysisRequestHandler" name="/analysis/document" startup="lazy"/>
<requestHandler class="solr.admin.AdminHandlers" name="/admin/"/>
<requestHandler class="solr.PingRequestHandler" name="/admin/ping">
<lst name="invariants">
<str name="qt">search</str>
<str name="q">solrpingquery</str>
</lst>
<lst name="defaults">
<str name="echoParams">all</str>
</lst>
</requestHandler>
<requestHandler class="solr.DumpRequestHandler" name="/debug/dump">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="echoHandler">true</str>
</lst>
</requestHandler>
<admin>
<defaultQuery>*:*</defaultQuery>
</admin>
<updateRequestProcessorChain default="true" name="uima">
<processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
<lst name="uimaConfig">
<lst name="runtimeParameters"></lst>
<!-- Under $SOLR_HOME/solr/example-->
<str name="analysisEngine">desc/descPersonAnnotator.xml</str>
<bool name="ignoreErrors">false</bool>
<lst name="analyzeFields">
<bool name="merge">false</bool>
<arr name="fields">
<str>nombrecompleto</str>
</arr>
</lst>
<lst name="fieldMappings">
<lst name="type">
<str name="name">org.apache.uima.annotator.person</str>
<lst name="mapping">
<str name="feature">name</str>
<str name="field">uimaname</str>
</lst>
</lst>
</lst>
</lst>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>
<requestHandler class="solr.UpdateRequestHandler" name="/update">
<lst name="defaults">
<str name="update.processor">uima</str>
</lst>
</requestHandler>
</config>
当我使用 CQL 插入数据时,数据在 Lucene 中被正确索引,搜索工作正常,但 uima 注释器不工作。此外,当我将文档上传到 solr trought Sol 命令时,文档被成功索引并且搜索也在 CQL 中工作但 uima 都不起作用。我检查了日志,没有显示任何错误。
我在 Solr Apache 发行版 (v6.0.1) 中执行了相同的过程,它按预期工作。
我没有在 DSE_HOME 中看到核心文件以方便编辑文件,而且我还没有在 DSE 搜索中成功集成 UIMA,我在 DSE 搜索的核心配置中缺少什么?
通过不遵循 Solr 文档过程找到答案,而是使用 DSE 文档,特别是 Update request processor and field transformer (FIT) [2017-07-17]。
例子可以在DSE中找到here [2017-07-17]
上面 link 的过程显示了如何在索引时映射字段。通过创建一个使 UIMA 项目适合 FIT 项目的 jar 并将 类 添加到 solrconfig.xml
此过程允许使用 Solr 命令和 cql solr_query 对添加的元数据进行搜索。
我在 CentOS 7.3.1611 (Core) 上安装了 DSE 5.1 和 solr 6.0.1。并在 eclipse 中为我的注释器项目配置了 UIMA。
我正在关注 Solr 文档: https://wiki.apache.org/solr/Solr4UIMA
用 UIMA 创建的项目有一个简单的注释器来获取人名,已经在 UIMA 的 CAS Visual Debugger 中运行良好。并且已经在solr lib目录下创建并复制了jar(DSE_HOME/solr/lib)这里还有solr集成uima的jar(SOLR_HOME/contrib/uima/lib,SOLR_HOME/contrib/uima/lucene-lib,SOLR_HOME/dist/solr-uima-version ).
我在 cassandra 中创建的 table 是:
CREATE TABLE uima_solr.person_annotator (
id int PRIMARY KEY,
apellido text,
nombre text,
nombrecompleto text,
solr_query text,
uimaname set<text>
solr 核心使用模式:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schema name="autoSolrSchema" version="1.5">
<types>
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType class="org.apache.solr.schema.TrieIntField" name="TrieIntField"/>
</types>
<fields>
<field indexed="true" multiValued="false" name="nombrecompleto" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="apellido" stored="true" type="TextField"/>
<field indexed="true" multiValued="false" name="nombre" stored="true" type="TextField"/>
<field docValues="true" indexed="true" multiValued="false" name="id" stored="true" type="TrieIntField"/>
<field indexed="true" multiValued="false" name="all" stored="false" type="TextField"/>
<field indexed="true" multiValued="true" name="uimaname" stored="true" type="TextField"/>
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>all</defaultSearchField>
<copyField source="nombrecompleto" dest="all"/>
<copyField source="apellido" dest="all"/>
<copyField source="nombre" dest="all"/>
</schema>
solr_config 如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<config>
<abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
<luceneMatchVersion>LUCENE_6_0_0</luceneMatchVersion>
<dseTypeMappingVersion>2</dseTypeMappingVersion>
<directoryFactory class="solr.StandardDirectoryFactory" name="DirectoryFactory"/>
<indexConfig>
<rt>false</rt>
<useCompoundFile>false</useCompoundFile>
<ramBufferSizeMB>512</ramBufferSizeMB>
<mergeFactor>10</mergeFactor>
<reopenReaders>true</reopenReaders>
<deletionPolicy class="solr.SolrDeletionPolicy">
<str name="maxCommitsToKeep">1</str>
<str name="maxOptimizedCommitsToKeep">0</str>
</deletionPolicy>
<infoStream file="INFOSTREAM.txt">false</infoStream>
</indexConfig>
<jmx/>
<updateHandler class="solr.DirectUpdateHandler2">
<autoSoftCommit>
<maxTime>10000</maxTime>
</autoSoftCommit>
</updateHandler>
<query>
<maxBooleanClauses>1024</maxBooleanClauses>
<filterCache class="solr.SolrFilterCache" highWaterMarkMB="256" lowWaterMarkMB="128"/>
<enableLazyFieldLoading>true</enableLazyFieldLoading>
<useColdSearcher>true</useColdSearcher>
<maxWarmingSearchers>16</maxWarmingSearchers>
</query>
<requestDispatcher handleSelect="true">
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000"/>
<httpCaching never304="true"/>
</requestDispatcher>
<requestHandler class="solr.SearchHandler" default="true" name="search">
<lst name="defaults">
<int name="rows">10</int>
</lst>
</requestHandler>
<requestHandler class="com.datastax.bdp.search.solr.handler.component.CqlSearchHandler" name="solr_query">
<lst name="defaults">
<int name="rows">10</int>
</lst>
</requestHandler>
<!--<requestHandler class="solr.UpdateRequestHandler" name="/update"/>-->
<requestHandler class="solr.UpdateRequestHandler" name="/update/csv" startup="lazy"/>
<requestHandler class="solr.UpdateRequestHandler" name="/update/json" startup="lazy"/>
<requestHandler class="solr.FieldAnalysisRequestHandler" name="/analysis/field" startup="lazy"/>
<requestHandler class="solr.DocumentAnalysisRequestHandler" name="/analysis/document" startup="lazy"/>
<requestHandler class="solr.admin.AdminHandlers" name="/admin/"/>
<requestHandler class="solr.PingRequestHandler" name="/admin/ping">
<lst name="invariants">
<str name="qt">search</str>
<str name="q">solrpingquery</str>
</lst>
<lst name="defaults">
<str name="echoParams">all</str>
</lst>
</requestHandler>
<requestHandler class="solr.DumpRequestHandler" name="/debug/dump">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="echoHandler">true</str>
</lst>
</requestHandler>
<admin>
<defaultQuery>*:*</defaultQuery>
</admin>
<updateRequestProcessorChain default="true" name="uima">
<processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
<lst name="uimaConfig">
<lst name="runtimeParameters"></lst>
<!-- Under $SOLR_HOME/solr/example-->
<str name="analysisEngine">desc/descPersonAnnotator.xml</str>
<bool name="ignoreErrors">false</bool>
<lst name="analyzeFields">
<bool name="merge">false</bool>
<arr name="fields">
<str>nombrecompleto</str>
</arr>
</lst>
<lst name="fieldMappings">
<lst name="type">
<str name="name">org.apache.uima.annotator.person</str>
<lst name="mapping">
<str name="feature">name</str>
<str name="field">uimaname</str>
</lst>
</lst>
</lst>
</lst>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>
<requestHandler class="solr.UpdateRequestHandler" name="/update">
<lst name="defaults">
<str name="update.processor">uima</str>
</lst>
</requestHandler>
</config>
当我使用 CQL 插入数据时,数据在 Lucene 中被正确索引,搜索工作正常,但 uima 注释器不工作。此外,当我将文档上传到 solr trought Sol 命令时,文档被成功索引并且搜索也在 CQL 中工作但 uima 都不起作用。我检查了日志,没有显示任何错误。
我在 Solr Apache 发行版 (v6.0.1) 中执行了相同的过程,它按预期工作。
我没有在 DSE_HOME 中看到核心文件以方便编辑文件,而且我还没有在 DSE 搜索中成功集成 UIMA,我在 DSE 搜索的核心配置中缺少什么?
通过不遵循 Solr 文档过程找到答案,而是使用 DSE 文档,特别是 Update request processor and field transformer (FIT) [2017-07-17]。
例子可以在DSE中找到here [2017-07-17]
上面 link 的过程显示了如何在索引时映射字段。通过创建一个使 UIMA 项目适合 FIT 项目的 jar 并将 类 添加到 solrconfig.xml
此过程允许使用 Solr 命令和 cql solr_query 对添加的元数据进行搜索。