【问题标题】:solr indexes documents but does not search in themsolr 索引文档但不在其中搜索
【发布时间】:2012-04-30 08:31:57
【问题描述】:

我是 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"/>

【问题讨论】:

  • 您的查询和架构是什么样的?你试过搜索*:*吗?
  • @MauricioScheffer 我尝试搜索*:*,结果标签的属性numfound10020。但它只显示 10 个结果 &lt;docs&gt;。我查询了标题或描述中的单词,我会编辑我的问题以向您展示架构
  • @MauricioScheffer 我查询了*:* 并传递了参数start=50,它显示了我在我的xml 文件中发布的数据,但为什么它无法搜索它们?
  • @lovesh:可能显示10个结果,因为默认行数设置为10,您可以直接编辑URL来增加/减少这个数字。
  • @lovesh 什么查询有意外结果?

标签: solr


【解决方案1】:

如果您使用 Solr 示例站点中的默认设置,则借助 /select 请求处理程序的 solrconfig.xml 文件中的 df 设置,它将默认搜索字段设置为 @987654323 @ 场地。

<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 title 值的文档。

我建议如下:

  1. 通过指定以下内容尝试查询:title:Sony 应该返回您所期望的内容。
  2. 如果您希望 title 字段包含在默认查询字段中,则将以下 copyField 语句添加到 schema.xml 文件并重新加载您的 10000 文档文件。 &lt;copyField source="title" dest="text"&gt;

我希望这会有所帮助。

【讨论】:

  • 非常感谢。使用title:sony 有效。但是,如果我将title 的类型从text_general 更改为text_en_splitting,则查询title:sony 再次返回0 个结果。此外,如果我将name 的类型从text_general 设置为text_en_splitting,我不会得到所需的行为。我的意思是如果name 字段包含A-DATA 并且我搜索adata 没有匹配项。任何想法为什么会发生这些事情?
  • 你拯救了我的一天。谢谢库克先生。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 2011-02-17
相关资源
最近更新 更多