2009-08-18 12 views
0

Ich habe ein Solr-Schema, das ein „url“ Feld hat:Warum kann ich SolrJ nicht nach einer URL abfragen?

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

ich SolrInputDocuments mit allen Feldern hinzufügen und abfragen sie das Textfeld mit Rücken und/oder mit einem Filter-Abfrage auf „Konzept“. Aber wenn ich versuche, eine bestimmte URL abzufragen, bekomme ich keine Ergebnisse. Mein Code sieht so aus:

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; 

I mit und ohne die ClientUtils.escapeQueryChars habe versucht, und ich habe versucht, eine Abfrage von „url:“ verwenden oder eine Filterabfrage auf URL. Ich bekomme nie etwas zurück. Irgendwelche Hinweise?

Antwort

0

Dammit, eine andere dumme meinerseits: Dank Cody Vorschlag Luke zu verwenden, entdeckte ich diesen unbequemen Teil des Schemas:

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

ändern, dass zu indexed="true" das Problem behoben.

+0

In der Tat können Sie nicht auf einem nicht indizierten Feld suchen :) – jeje

1

Was ist der eigentliche Typ von "URL"? In Ihrer schema.xml sollten Sie eine Reihe von "fieldType" -Elementen haben, die die eigentlichen Solr-Backing-Klassen und -Filter auflisten, aus denen ein Datentyp besteht.

Für Ihren "fieldType" für die "url" interessiert Sie das Attribut "class". Z.B. Der einfachste Freitexttyp hat eine Klasse = "solr.TextField". Möglicherweise verwenden Sie einen Typ mit verrückten Filtern, und Lucene/Solr indexiert Ihre Daten anders als erwartet.

Herunterladen Luke und visuell auf Ihrem Index aussehen:

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

Es wird Ihnen helfen „Blick“ auf Ihre Daten - wie ich schon sagte, seine vielleicht gespeichert anders als das, was Sie erwarten.

+0

Oh, richtig, ich habe diesen Teil rausgelassen. Der "url" -Typ ist nur ein Klon des Texttyps, bei dem der Analyzer-Kram entfernt wurde. Ich habe auch versucht, es zu einem Klon des String-Typs zu machen. –

Verwandte Themen