0

我开始与 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"/>

现在这是我的问题发挥作用的地方。我搜索了钢人队,结果很好,但如果我寻找企鹅或许多其他领域,它不会拉回任何结果。但是,如果我做描述:企鹅,结果会按预期拉回。

谁能帮我理解为什么某些字段需要 : 之前的部分,而其他字段则不需要?

搜索示例:solr/select?indent=on&q=penguins&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/select?indent=on&q=description:penguins&wt=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>
4

1 回答 1

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.更改用户编辑的语法,将查询企鹅变成查询(name:penguins) OR (subject:penguins) OR (description:penguins)

于 2012-08-31T18:52:04.733 回答