solr索引文档但不搜索它们

时间:2012-04-27 16:55:57

标签: solr

我是Solr的新手,我正在尝试Solr(3.6)包(apache-solr-3.6.0.tgz)的示例文件夹中的示例。我启动了服务器,并在example/exampledocs中发布了示例 xml 文件,然后我可以搜索内容并且Solr将返回匹配,这一切都很好。但后来我尝试发布另一个包含10,000多个文档的xml文件。我修改了example/solr/conf/schema.xml文件以添加我的xml文件的字段,然后重新启动服务器并发布了我的xml文件。我检查了Solr管理面板(http://localhost:8983/solr/admin/stats.jsp)中的统计信息,并显示numDocs : 10020。现在这意味着文档已成功发布。但是当我搜索我发布的文档中存在的任何内容(来自10,000文档xml文件)时,它返回0结果。但Solr仍然能够返回与example/exampledocs文件夹中默认出现的文档中的内容匹配的搜索结果。我对这里发生的事情毫无头绪。 numDoc的值清楚地表明我在xml文件中发布的文档已被编入索引。 我可以检查其他任何东西,看看这有什么问题?

使用Solr软件包的示例中的模式就像这样

<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
<field name="name" type="text_general" indexed="true" stored="true"/><field name="alphaNameSort" type="alphaOnlySort" indexed="true" stored="false"/>
<field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true"/>
<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="features" type="text_en_splitting" indexed="true" stored="true" multiValued="true"/>
<field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/>
<field name="weight" type="float" indexed="true" stored="true"/>
<field name="price" type="float" indexed="true" stored="true"/>
<field name="popularity" type="int" indexed="true" stored="true"/>
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="subject" type="text_general" indexed="true" stored="true"/>
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="inStock" type="boolean" indexed="true" stored="true"/>

以及更多....

我发布的xml文件的架构有一些与上述架构相同的字段,如标题,描述,价格等,所以我输入了schema.xml中的其余字段,如下所示

<field name="cid" type="int" indexed="false" stored="false"/>
<field name="discount" type="float" indexed="true" stored="true"/>
<field name="link" type="string" indexed="true" stored="true"/>
<field name="status" type="string" indexed="true" stored="true"/>
<field name="pubDate" type="string" indexed="true" stored="true"/>
<field name="image" type="string" indexed="false" stored="false"/>

1 个答案:

答案 0 :(得分:6)

如果您使用的是Solr示例站点中的默认设置,那么凭借df请求处理程序的solrconfig.xml文件中的/select设置,它将设置默认搜索字段到text字段。

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

如果您查看字段定义下方的schema.xml文件,您会看到多个copyField设置,这些设置会将某些字段中的值移动到text字段中,从而可以通过这些设置进行搜索默认字段设置。在标题字段中搜索Sony的示例中,如果查看copyField语句,您会看到title字段未被复制到text默认搜索字段。因此,您的查询中不会返回具有Sony标题值的文档。

我建议如下:

  1. 通过指定以下内容来尝试查询:title:Sony应该返回您期望的内容。
  2. 如果要将title字段包含在默认查询字段中,请将以下copyField语句添加到schema.xml文件并重新加载10000文档文件。  <copyField source="title" dest="text">
  3. 我希望这会有所帮助。