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 を追加し、テキスト フィールドや "concept" のフィルター クエリを使用してクエリを返すことができます。しかし、特定の 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 には、データ型を構成する実際の Solr バッキング クラスとフィルターをリストする "fieldType" 要素のセットが必要です。

「url」の「fieldType」については、「class」属性に関心があります。たとえば、最も基本的なフリーテキスト型には class="solr.TextField" があります。奇抜なフィルターを持つタイプを使用している可能性があり、Lucene/Solr は、予想とは異なる方法でデータのインデックスを作成することになります。

Luke をダウンロードして、インデックスを視覚的に確認します。

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

データを「見る」のに役立ちます-私が言ったように、おそらくあなたが期待するものとは異なる方法で保存されています。

于 2009-08-18T00:31:24.023 に答える
0

ダミット、私の側のもう1つの愚かな人:ルークを使用するというコーディの提案のおかげで、私はスキーマのこの不便な部分を発見しました:

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

それを変更してindexed="true"問題を修正しました。

于 2009-08-18T00:46:02.503 に答える