索引时间内solr 4.5.1中的自动语言检测

时间:2014-07-12 10:09:54

标签: solr language-detection

我需要你的帮助。 我希望在索引时的索引时间内检测韩语和英语。

我的solr目录结构是

/opt/tmocat7/webapps/solr (solr webapp)
/usr/share/solr/collection1 (solr core)
/usr/share/solr/lib/langid (lib for langid)

首先,我将一些库(jsonic-1.2.7.jar,langdetect-1.1-20120112.jar,solr-langid-4.5.1.jar)复制到特定目录中(/ usr / share / solr / lib / langid ) - 我的solr位于

我的solrconfig.xml是

<lib dir="../lib/langid/" regex=".*\.jar" />

<requestHandler name="/update" class="solr.UpdateRequestHandler">    
    <lst name="defaults">   
    <str name="update.chain">dedupe</str> 
    <str name="update.chain">uuid</str>
    <str name="update.chain">langid</str>
    </lst>
</requestHandler>

<updateRequestProcessorChain name="langid">
    <processor class="org.apache.solr.update.processor.LangDetectLanguageIdentifierUpdateProcessorFactory">
        <bool name="langid">true</bool>
        <str name="langid.fl">title,content,comment</str>
        <str name="langid.langField">lang</str>
        <str name="langid.langsField">langs</str>
        <str name="langid.lcmap">ko:ko kor:ko en_GB:en en_US:en</str>
        <str name="langid.whitelist">ko,en</str>
        <bool name="langid.map">true</bool>
        <str name="langid.map.fl">title,content,comment</str>
        <bool name="langid.map.keepOrig">true</bool>
        <bool name="langid.map.individual">true</bool> 
        <str name="langid.fallback">ko</str>         
        <str name="langid.map.lcmap">ko:ko kor:ko en_GB:en en_US:en</str>
    </processor>
    <processor class="solr.LogUpdateProcessorFactory" />
    <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

和schema.xml是

<field name="lang" type="string" indexed="true" stored="true" multiValued="false" />
<field name="langs" type="string" indexed="true" stored="true" multiValued="true" />
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_ko" indexed="true" stored="true" multiValued="true"/>
<field name="content" type="text_ko" indexed="true" stored="true" multiValued="true"/>
<field name="comment" type="text_ko" indexed="true" stored="true" multiValued="true" />
<field name="site" type="text_general" indexed="true" stored="true" multiValued="false"/>
<field name="page" type="text_general" indexed="true" stored="true" multiValued="false"/>
<field name="fileloc" type="text_general" indexed="true" stored="true" 
 multiValued="false"/> 
<field name="filename" type="text_general" indexed="true" stored="true"
 multiValued="false" />
<field name="storeddate" type="date" indexed="true" stored="true" multiValued="false"/>    

<!-- for english web data-->

<field name="title_en" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="content_en" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="comment_en" type="text_en" indexed="true" stored="true" multiValued="true" />

<field name="title_ko" type="text_ko" indexed="true" stored="true" multiValued="true"/>
<field name="content_ko" type="text_ko" indexed="true" stored="true" multiValued="true"/>
<field name="comment_ko" type="text_ko" indexed="true" stored="true" multiValued="true" />

<copyField source="title" dest="title_en"/>
<copyField source="content" dest="content_en"/>
<copyField source="comment" dest="comment_en"/>
<copyField source="title" dest="title_ko"/>
<copyField source="content" dest="content_ko"/>
<copyField source="comment" dest="comment_ko"/>

我阅读了一些书籍并搜索网页以获取有关在solr中检测语言的信息,但无法检测语言。 我的错是什么?

有关详细信息,请添加我的post.sh和日志

这是post.sh

#!/bin/sh
FILES=$*
URL=http://locahost:port/solr/collection1/update

for f in $FILES; do
  echo Posting file $f to $URL
  curl $URL --data-binary @$f -H 'Content-type:application/xml'
  echo
done

#send the commit command to make sure all the changes are flushed and visible
curl $URL --data-binary '<commit/>' -H 'Content-type:application/xml'

echo

索引期间tomcat日志的某些部分

70634079 [http-bio-7070-exec-38] TRACE org.apache.solr.handler.UpdateRequestHandler  – body
70634079 [http-bio-7070-exec-38] DEBUG org.apache.solr.update.processor.LogUpdateProcessor  – PRE_UPDATE add{,id=2f2323f4f7966e0d} {{params({params(),defaults(update.chain=dedupe&update.chain=uuid&update.chain=langid)}),defaults(wt=xml)}}
70634125 [http-bio-7070-exec-38] TRACE org.apache.solr.update.UpdateLog  – TLOG: added id 2f2323f4f7966e0d to tlog{file=/usr/share/solr/collection1/data/tlog/tlog.0000000000000000129 refcount=1} LogPtr(29407) map=614254179
70634125 [http-bio-7070-exec-38] DEBUG org.apache.solr.update.processor.LogUpdateProcessor  – PRE_UPDATE FINISH {{params({params(),defaults(update.chain=dedupe&update.chain=uuid&update.chain=langid)}),defaults(wt=xml)}}
70634126 [http-bio-7070-exec-38] INFO  org.apache.solr.update.processor.LogUpdateProcessor  – [collection1] webapp=/solr path=/update params={} {add=[2f2323f4f7966e0d (1473490520171872256)]} 0 68
70634146 [http-bio-7070-exec-33] TRACE org.apache.solr.handler.UpdateRequestHandler  – body
70634146 [http-bio-7070-exec-33] DEBUG org.apache.solr.update.processor.LogUpdateProcessor  – PRE_UPDATE add{,id=329ee20831e1a0c7} {{params({params(),defaults(update.chain=dedupe&update.chain=uuid&update.chain=langid)}),defaults(wt=xml)}}
70634148 [http-bio-7070-exec-33] TRACE org.apache.solr.update.UpdateLog  – TLOG: added id 329ee20831e1a0c7 to tlog{file=/usr/share/solr/collection1/data/tlog/tlog.0000000000000000129 refcount=1} LogPtr(46005) map=614254179
70634148 [http-bio-7070-exec-33] DEBUG org.apache.solr.update.processor.LogUpdateProcessor  – PRE_UPDATE FINISH {{params({params(),defaults(update.chain=dedupe&update.chain=uuid&update.chain=langid)}),defaults(wt=xml)}}
70634148 [http-bio-7070-exec-33] INFO  org.apache.solr.update.processor.LogUpdateProcessor  – [collection1] webapp=/solr path=/update params={} {add=[329ee20831e1a0c7 (1473490520241078272)]} 0 2

我找不到任何其他警告或错误。 我需要你的建议 谢谢大家

2 个答案:

答案 0 :(得分:0)

我认为您使用/update/extract代替/update

在Solr 5.3.1中,当我使用/update/extract时,它可以正常工作。

这是完整的配置:

<requestHandler name="/update/extract" 
              startup="lazy"
              class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
  <str name="lowernames">true</str>
  <str name="uprefix">ignored_</str>

  <!-- capture link hrefs but ignore div attributes -->
  <str name="captureAttr">true</str>
  <str name="fmap.a">links</str>
  <str name="fmap.div">ignored_</str>

  <str name="update.chain">langid</str>
</lst>

答案 1 :(得分:0)

感谢您提出的问题和优秀的答案,他们帮助我正确配置了我的系统。我不知道我是如何设法将JAR文件solr-langdetect.*.*.*.jar放入我的lib目录中的,但每次启动solr时它都会显示以下错误:

org.apache.solr.common.SolrException: com.cybozu.labs.langdetect.DetectorFactory.loadProfile(Ljava/util/List;)V

删除该JAR文件后一切正常。然而,问题中提到的其他三个JAR文件(jsonic-*.*.*.jarlangdetect-*.*.jarsolr-langid-*.*.*.jar)是必需的。