2016-04-06 6 views

Antwort

3

Das Gehäuse der Abfragen hängt davon ab, wie die Arbeit der Lucene text analyzer während der Indexierung verwendet wird, und kann nicht in der Abfragezeit entschieden werden. Wenn Sie Präfixsuchen ohne Beachtung der Groß-/Kleinschreibung durchführen möchten, sollten Sie einen Mapper mit einem Analysator verwenden, der Kleinbuchstaben erzeugt. Diese Begriffe werden zur Suchzeit indiziert und abgeglichen. Zum Beispiel:

CREATE KEYSPACE test 
WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 1}; 
USE test; 
CREATE TABLE test (
    id INT PRIMARY KEY, 
    body TEXT 
); 

CREATE CUSTOM INDEX test_index ON test() 
USING 'com.stratio.cassandra.lucene.Index' 
WITH OPTIONS = { 
    'refresh_seconds' : '1', 
    'schema' : '{ 
     fields : { 
      body1 : {type :"string", column:"body", case_sensitive:false}, 
      body2 : {type :"string", column:"body", case_sensitive:true} 
     } 
    }' 
}; 

INSERT INTO test(id,body) VALUES (1, 'foo'); 
INSERT INTO test(id,body) VALUES (2, 'Foo'); 
INSERT INTO test(id,body) VALUES (3, 'bar'); 
INSERT INTO test(id,body) VALUES (4, 'Bar'); 


SELECT * FROM test WHERE expr(test_index, 
    '{filter:{type:"prefix", field:"body2", value:"f"}}'); -- Returns foo 
SELECT * FROM test WHERE expr(test_index, 
    '{filter:{type:"prefix", field:"body2", value:"F"}}'); -- Returns Foo 

SELECT * FROM test WHERE expr(test_index, 
    '{filter:{type:"prefix", field:"body1", value:"f"}}'); -- Returns foo and Foo 
SELECT * FROM test WHERE expr(test_index, 
    '{filter:{type:"prefix", field:"body1", value:"F"}}'); -- Returns no results 
+1

Vielen Dank! Genau das, was ich gesucht habe. – user1019182