0

我有一个具有“url”字段的 Solr 架构:

   <fieldType name="url" class="solr.TextField"
        positionIncrementGap="100">
   </fieldType>

   <fields>
        <field name="id" type="string" stored="true" indexed="true"/>
        <field name="url" type="url" stored="true" indexed="false"/>
        <field name="chunkNum" type="long" stored="true" indexed="false"/>
        <field name="origScore" type="float" stored="true" indexed="true"/>
        <field name="concept" type="string" stored="true" indexed="true"/>
        <field name="text" type="text" stored="true" indexed="true"
            required="true"/>
        <field name="title" type="text" stored="true" indexed="true"/>
        <field name="origDoctype" type="string" stored="true" indexed="true"/>

        <field name="keywords" type="string" stored="true" indexed="true"/>
    </fields>
    <uniqueKey>id</uniqueKey>
    <defaultSearchField>text</defaultSearchField>
<solrQueryParser defaultOperator="OR"/>

我可以使用所有字段添加 SolrInputDocuments 并使用文本字段和/或使用“概念”上的过滤器查询来查询它们。但是当我尝试查询特定的 url 时,我没有得到任何结果。我的代码如下所示:

    SolrQuery query = new SolrQuery();
    query.setQuery("url:" + ClientUtils.escapeQueryChars(url));
    //query.setQuery("*:*");
    //query.addFilterQuery("url:" + ClientUtils.escapeQueryChars(url));

    List<Chunk> retCode = null;

    try
    {
        QueryResponse resp = solrServer.query(query);
        SolrDocumentList docs = resp.getResults();
        retCode = new ArrayList<Chunk>(docs.size());
        for (SolrDocument doc : docs)
        {
            LOG.debug("got doc " + doc);
            Chunk chunk = new Chunk(doc);
            retCode.add(chunk);
        }
    }
    catch (SolrServerException e)
    {
        LOG.error("caught a server exception", e);
    }
    return retCode;

我尝试过使用和不使用 ClientUtils.escapeQueryChars,我尝试过使用“url:”查询或 url 上的过滤器查询。我从来没有得到任何回报。有什么提示吗?

4

2 回答 2

1

“url”的实际类型是什么?在您的 schema.xml 中,您应该有一组“fieldType”元素,其中列出了构成数据类型的实际 Solr 支持类和过滤器。

对于“url”的“fieldType”,您对“class”属性感兴趣。例如,最基本的自由文本类型有一个 class="solr.TextField"。您可能正在使用一种带有一些古怪过滤器的类型,而 Lucene/Solr 最终索引您的数据的方式与您所期望的不同。

下载 Luke 并直观地查看您的索引:

http://www.getopt.org/luke/

它将帮助您“查看”您的数据——就像我说的那样,它的存储方式可能与您的预期不同。

于 2009-08-18T00:31:24.023 回答
0

该死,我的另一个愚蠢的部分:感谢 Cody 使用 Luke 的建议,我发现了架构中这个不方便的部分:

    <field name="url" type="url" stored="true" indexed="false"/>

改变它来indexed="true"解决问题。

于 2009-08-18T00:46:02.503 回答