2016-04-05 4 views
0

eine einfache Tabelle Betrachtet:Wie Dokument mit SOLR Abfrage und exakte Zeichenfolge Übereinstimmung finden

CREATE TABLE transactions (
    enterprise_id uuid, 
    transaction_id text, 
    state text, 
    PRIMARY KEY ((enterprise_id, transaction_id)) 

und Solr Kern mit standardmäßig automatisch generierten Parameter.

Wie konstruiere ich eine Solr-Abfrage, die mich Datensätze in dieser Tabelle finden wird, die state Wert genaue Übereinstimmung mit einem Eingang haben, unter Berücksichtigung der state kann beliebiger String sein?

Ich versuchte dies mit Zustandswert a+b. Dies funktioniert gut mit q=state:"a+b", aber das erzeugt eine „Phrase Abfrage“:

"rawquerystring": "state:\"a+b\"", 
"querystring": "state:\"a+b\"", 
"parsedquery": "PhraseQuery(state:\"a b\")", 
"parsedquery_toString": "state:\"a b\"", 

die gleiche Datensatz also gefunden, wenn ich Abfrage wie q=state:"a(b" verwenden, die in die gleichen lautAbfrageErgebnisse und finden den Datensatz mit state von a+b. Das ist inakzeptabel für mich, weil ich eine genaue Übereinstimmung brauche.

Ich ging durch https://cwiki.apache.org/confluence/display/solr/Other+Parsers, und versuchte mit q={!term f=state}a+b oder , aber keiner findet sogar meine Beispiel Transaktionsaufzeichnung.

Antwort

1

Wahrscheinlich hast du state als TextField erzeugt, in dem Standard tokenization StandardTokenizer angelegt wird, und dann wird eine Spaltung auf + und das Pluszeichen selbst verworfen gemacht. Sie könnten einen anderen Tokenizer (Whitespace?) Verwenden oder einfach einen StrField für eine exakte Übereinstimmung angeben.

Dies funktioniert für mich mit state als StrField:

select * from transactions where solr_query='state:a+b';

+0

'StrField' ist einfacher als mit einem tokenizer Ausmisten, ty :) –