如何让solr返回所有索引的结果?

时间:2012-08-31 18:33:22

标签: solr solrj

我开始与Solr整合并遇到了我认为的问题。我使用java API上传了一个简单的电子表格(这是一个施加:

 - Document, id,          value
 - Excel3,   name,        steelers
 - Excel3,   subject,     pirates
 - Excel3,   description, penguins
 - Excel3,   comments,    panthers
 - Excel3,   author,      panthers

使用这个我使用第一列作为“文档名称”,第二列作为索引文档中的字段,第三列作为索引数据。所有这些字段都已存在于schema.xml中,但以下是它们的设置方式:

<field name="id" type="string" indexed="true" stored="true" required="true" />
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="subject" type="text_general" indexed="true" stored="true"/>
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="comments" type="text_general" indexed="true" stored="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>

现在这里是我的问题发挥作用的地方。我搜索说steelers,它回来很好,但如果我寻找企鹅,或许多其他领域,它不会撤回任何结果。但是,如果我做描述:企鹅,结果会像预期的那样回落。

任何人都可以帮助我理解为什么某些领域需要以前的部分,而不是其他领域的部分?

示例搜索: solr / select?indent = on&amp; q = penguins&amp; wt = xml ----不返回任何结果

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">0</int>
        <lst name="params">
            <str name="indent">on</str>
            <str name="q">penguins</str>
            <str name="wt">xml</str>
        </lst>
    </lst>
    <result name="response" numFound="0" start="0"/>
</response>

的solr /选择缩进= ON&安培; Q =描述:企鹅&安培;重量= XML

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">18</int>
        <lst name="params">
            <str name="indent">on</str>
            <str name="q">description:penguins</str>
            <str name="wt">xml</str>
        </lst>
    </lst>
    <result name="response" numFound="1" start="0">
        <doc>
            <str name="author">panthers</str>
            <str name="comments">panthers</str>
            <str name="description">penguins</str>
            <str name="id">Excel3</str>
            <str name="name">steelers</str>
            <str name="subject">pirates</str>
        </doc>
    </result>
</response>

1 个答案:

答案 0 :(得分:2)

默认查询解析器将查询默认字段,该字段可在 schema.xml 中指定,如下所示:http://wiki.apache.org/solr/SchemaXml#The_Default_Search_Field

我认为@Frank Famer关于使用DisMax解析器的评论是解决这个问题的真正方法。也就是说,这是我在实践中看到的两种解决方法:

1.创建另一个索引(未存储)的copyField,其中包含要搜索的所有字段中的值,然后将该字段指定为默认值。它在 schema.xml 文件中看起来像这样。

<field name="myhugedefaultfield" type="text" indexed="true" stored="false" multiValued="true"/>

<copyField source="name" dest="myhugedefaultfield"/>
<copyField source="subject" dest="myhugedefaultfield"/>
<copyField source="description" dest="myhugedefaultfield"/>

<defaultSearchField>myhugedefaultfield</defaultSearchField>

2.更改用户编辑的语法并将企鹅的查询转换为查询(名称:企鹅)OR(主题:企鹅)OR(描述:企鹅)