2009-12-29 12 views
8

Mam problem z Solr i Faceting i zastanawiam się, czy ktoś wie o poprawce. Pracuję nad tym w tej chwili, ale naprawdę chcę się dowiedzieć, dlaczego moje zapytanie nie działa.Faceting w Solr przy użyciu pól "łańcuchowych", pól "tekstowych" i "pól" kopiowania

Tu jest moja Schema, uproszczone, aby ułatwić wykonanie:

<fields> 
    <field name="uniqueid" type="string" indexed="true" required="true"/> 
    <!-- Indexed and Stored Field ---> 
    <field name="recordtype" type="text" indexed="true" stored="true"/> 
    <!-- Facet Version of fields --> 
    <field name="frecordtype" type="string" indexed="true" stored="false"/> 
</fields> 

<!-- Copy fields for facet searches --> 
<copyField source="recordtype" dest="frecordtype"/> 

Jak widać mam przypadek niewrażliwe pole o nazwie RECORDTYPE i jest kopiowany do wrażliwym na sprawy frecordtype pola, które nie tokenize tekst. Wynika to z tego, że solr zwraca wartość indeksowaną zamiast wartości zapisanej w wynikach faceting.

Gdy próbuję następujące zapytanie:

http://localhost:8080 
/solr 
/select 
?version=2.2 
&facet.field=%7b!ex%3dfrecordtype%7dfrecordtype 
&facet=on 
&fq=%7b!tag%3dfrecordtype%7dfrecordtype%3aLarge%20Record 
&f1=*%2cscore 
&rows=20 
&start=0 
&qt=standard 
&q=text%3a%25 

nie dostanę żadnych wyników, jednak facteting nadal pokazuje, że jest 1 rekord.

<result name="response" numFound="0" start="0" /> 
<lst name="facet_counts"> 
    <lst name="facet_queries" /> 
<lst name="facet_fields"> 
<lst name="frecordtype"> 
    <int name="Large Record">1</int> 
    <int name="Small Record">12</int> 
    <int name="Other">1</int> 
    </lst> 
    </lst> 
    <lst name="facet_dates" /> 
    </lst> 

Jednakże jeśli zmienić zapytanie fitler (linia 7), aby być na "RECORDTYPE" zamiast frecordtype:

http://localhost:8080 
/solr 
/select 
?version=2.2 
&facet.field=%7b!ex%3dfrecordtype%7dfrecordtype 
&facet=on 
&fq=%7b!tag%3dfrecordtype%7drecordtype%3aLarge%20Record 
&f1=*%2cscore 
&rows=20 
&start=0 
&qt=standard 
&q=text%3a%25 

uzyskać wynik 1 z tyłu, że chcę.

<result name="response" numFound="1" start="0" /> 
<lst name="facet_counts"> 
    <lst name="facet_queries" /> 
<lst name="facet_fields"> 
<lst name="frecordtype"> 
    <int name="Large Record">1</int> 
    <int name="Small Record">12</int> 
    <int name="Other">1</int> 
    </lst> 
    </lst> 
    <lst name="facet_dates" /> 
    </lst> 

Więc moje pytanie brzmi, czy jest coś, co trzeba zrobić, aby otrzymać pierwszą wersję zapytania, aby powrócić wyników chcę? Być może ma to jakiś związek z kodowaniem URL? Wszelkie wskazówki od niektórych guru solr lub w inny sposób byłyby bardzo wdzięczne.

UWAGA: Nie jest to konieczne pytanie dotyczące faceting, ponieważ faceting faktycznie działa. Bardziej pytanie kwerendowe polega na tym, że nie mogę wykonać kwerendy w polu "łańcuchowym", mimo że wielkość liter i odstępy są dokładnie takie same jak wersji indeksowanej.

EDIT: Aby uzyskać więcej informacji na temat szlifowaniem można sprawdzić te blogu wpisu na nim:

Thanks

Dave

+0

Arrhhh Posortowałem to ... Musisz wycenić wartości ze spacjami :) – CraftyFella

Odpowiedz

10

Trzeba cytuje wartości o wartości

Np.

frecordtype: "Duży Record"

działa

frecordtype: Duży Record

To będzie szukać Duża w frecordtype, który przywróci nic .. następnie nagrać przez pole w domyślnej solr.

Powiązane problemy