2012-07-17 13 views
8

Sto cercando di utilizzare una ricerca SOLR per alcuni record che hanno FirstName come;SOLR Cerca query case sensitiveness

abcd 
Abcd 
abcD 
ABcd 
abCd 
abCD 

Ora sto cercando di eseguire una ricerca con il supporto caratteri jolly. Ho bisogno di capire come funziona esattamente la ricerca in termini di distinzione tra maiuscole e minuscole.

ad es. Se passo il parametro FirstName come ab * Vs Ab *, quali record verrebbero restituiti?

C'è un modo per rendere/forzare la ricerca per essere case-sensitive O case-insenstive?

prega di aiuto. Grazie.

risposta

6

Dipende da come si definiscono i campi in schema.xml. Se si utilizza LowerCaseFilterFactory durante l'indicizzazione e l'esecuzione di query, tutte le query saranno senza distinzione tra maiuscole e minuscole. Altrimenti sarà case-sensitive.

<filter class="solr.LowerCaseTokenizerFactory"/> 
7

Lo si configura nello schema. Ad esempio:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="query"> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

significa che il campo è considerato in minuscolo per le query, ciò consente di dare l'impressione come ricerca senza distinzione tra maiuscole e minuscole.

+0

al solr 5, ciò richiederà un tokenizzatore - chrismarx

2

Per impostazione predefinita, un valore viene confrontato esattamente con il valore memorizzato. Se si desidera che un campo sia insensibile alle maiuscole e alle minuscole, il modo usuale è di avere un tipo di campo che utilizza un filtro in minuscolo, rendendo tutti i contenuti indicizzati nello stesso caso e praticamente insensibili alla ricerca (poiché anche il valore della query sarà in minuscolo).

Il contenuto esempio lo fa per il 'testo' e tipi di campo 'text_en':

<filter class="solr.LowerCaseFilterFactory"/> 

V'è tuttavia un paio di zone particolari in cui la manipolazione automagic di caratteri minuscoli per le query wild card può causare problemi, e MultitermQueryAnalysis was introduced in Solr 3.6 and 4.0 to handle those situations . 3.6 e 4.0 dovrebbero eseguire automaticamente la ricerca con jolly nel modo giusto se il campo è già in minuscolo.

Suggerirei il nome in minuscolo nella query (purché abbia applicato LowerCaseFilterFactory durante l'indicizzazione) quando si utilizzano i caratteri jolly se non si ottiene il comportamento corretto prima di 3.6.

2

I campi definiti predefiniti nello schema solr funzionano in modo molto diverso.

tipo di dati 'string' memorizza una parola come stringa esatta non completa.

Mentre il 'text_general' esegue in genere la tokenizzazione e l'elaborazione secondaria (come maiuscole/minuscole e intere corrispondenze di stringa). è molto utile per tutti gli scenari quando vogliamo abbinare parte di una frase.

Se il seguente esempio, "Cerca nella frase", è indicizzato ad entrambi i campi, dobbiamo cercare esattamente la ricerca nella frase per ottenere un hit dal campo stringa, mentre restituirà il risultato diverso in caso di text_general.

Qui il nome del venditore corrisponderà esattamente nella stringa di ricerca, mentre il nome del prodotto sarà cercato nell'intera frase sopra.

Esempio:

<field name="seller_name" type="string" indexed="true" stored="true"/> 
<field name="product_name" type="text_general" indexed="true" stored="true"/>