首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr -分析工作,但没有查询结果

Solr -分析工作,但没有查询结果
EN

Stack Overflow用户
提问于 2017-03-13 15:47:07
回答 1查看 424关注 0票数 0

我试图通过使用SmartChineseAnalyzer在我的索引中添加对中文的支持,但是尽管在分析页面中按预期工作,尝试查询并不返回相同文本的项。

在分析页面中,我使用以下中文文本Field Value (Index)滴灌作为Field Value (Query)

搜索术语的标记化和标记似乎与预期的一样工作(以粗体标记的查询值):

netafim \,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,在|水,和|微|灌溉|解决||案|的|全球|领导者,在|水,在|水,和|微|灌溉|解决||案|的|全球|领导者,在|水,和|微|灌溉|解决||案|的|全球|领导者,在|水,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,在|水,在|水,和|微|灌溉|解决||案|的|全球|领导者,在|水,和|微|灌溉|解决||案|的|全球|领导者,在|水,在|水,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,在|水,和|微|灌溉|解决||案|的|全球|领导者,在|水,netafim,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,和|微|灌溉|解决||案|的|全球|领导者,在|水,在|水

但是,仅在查询页中查询滴灌并不返回任何结果。

需要注意的是,该文本确实出现在项的属性(description_zh)中,并且我能够通过并行英语属性(description_en)查询来找到项目。

我的配置:

Solr版本- 6.4.2

schema.xml

代码语言:javascript
复制
...
 <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

<fieldType name="text_general_zh" class="solr.TextField">
  <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>
</fieldType>

...

<field name="id" type="string" indexed="true" stored="true" required="true" />
<field name="description_en" type="text_general" indexed="true" stored="true" multiValued="false"/>
<field name="description_zh" type="text_general_zh" indexed="true" stored="true" multiValued="false"/>
<field name="size" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="name_en" type="text_en_splitting" indexed="true" stored="true" multiValued="false"/>
<field name="name_zh" type="text_en_splitting" indexed="true" stored="true" multiValued="false"/>

...

<uniqueKey>id</uniqueKey>

<!-- Copy Fields -->
<copyField source="name_en" dest="text"/>
<copyField source="name_zh" dest="text"/>
<copyField source="description_en" dest="text"/>
<copyField source="description_zh" dest="text"/>

...

solrconfig.xml

代码语言:javascript
复制
...

  <luceneMatchVersion>6.4.2</luceneMatchVersion>

  <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" />
  <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" />

  <lib dir="../lib/" regex="mysql-connector-java-\d.*\.jar" />
  <lib dir="../lib/" regex="lucene-analyzers-smartcn-\d.*\.jar" />

  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />

  <directoryFactory name="DirectoryFactory" 
                    class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}">
  </directoryFactory>

  <codecFactory class="solr.SchemaCodecFactory"/>

  <schemaFactory class="ClassicIndexSchemaFactory"/>


  <dataDir>${solr.blacklight-core.data.dir:}</dataDir>

  <requestDispatcher handleSelect="true" >
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
  </requestDispatcher>

  <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />

  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">  
      <str name="config">data-config.xml</str>
    </lst> 
  </requestHandler>

  <!-- config for the admin interface --> 
  <admin>
    <defaultQuery>*:*</defaultQuery>
  </admin>

  <requestHandler name="search" class="solr.SearchHandler" default="true">
    <!-- default values for query parameters can be specified, these
         will be overridden by parameters in the request
      -->
     <lst name="defaults">
       <str name="defType">dismax</str>
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>

       <str name="q.alt">*:*</str>

       <str name="q.op">OR</str>
       <str name="df">text</str>

       <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>

       <str name="qf">
         name^100000
         description^25000
         text
       </str>
       <str name="pf">
         name^1000000
         description^250000
         text^10
       </str>

       <str name="fl">
          id, 
          name_en,
          name_zh,
          size,
          description_en,
          description_zh,
          created_at,
          updated_at
       </str>

       <str name="facet">true</str>
       <str name="facet.mincount">1</str>
       <str name="facet.limit">10</str>
       <str name="facet.field">company_size</str>

     </lst>

    ...

我遗漏了什么?

谢谢!西蒙。

EN

回答 1

Stack Overflow用户

发布于 2017-03-14 13:08:19

(1)让我们仔细看看你的solrconfig.xml

代码语言:javascript
复制
   <str name="qf">
     name^100000
     description^25000
     text
   </str>

这意味着您将namedescriptiontext作为查询字段放在dismax查询解析器中(具有不同的字段提升,但这并不重要)。

(2) text字段从name_enname_zhdescription_endescription_zh等来源积累字段值。这就是您的schema.xml正在做的事情:

代码语言:javascript
复制
<!-- Copy Fields -->
<copyField source="name_en" dest="text"/>
<copyField source="name_zh" dest="text"/>
<copyField source="description_en" dest="text"/>
<copyField source="description_zh" dest="text"/>

(3)从另一边看,text字段没有中文分析(我打赌它有fieldType=text_general --如果我错了,请纠正我)。因此,通过查询text字段,您将永远不会得到与中文相关的文本分析。

(4)为了解决问题,应该对查询-时间字段集进行分离。例如,代替text字段(它是所有字段的累加器),将其分开,如下所示:

代码语言:javascript
复制
   <str name="qf">
     name^100000
     description^25000
     name_en
     name_zh
     description_en
     description_zh
   </str>

然后分析器将运行在适当的fieldType上。

  • field=description_en反对fieldType=text_general
  • field=description_zh反对fieldType=text_general_zh
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42767854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档