Lucene: frases de varias palabras como términos de búsqueda

Estoy tratando de crear un teléfono / directorio de empresas locales con Apache Lucene.

Tengo campos para el nombre de la calle, el nombre de la empresa, el número de teléfono, etc. El problema que tengo es que cuando trato de buscar por calle donde el nombre de la calle tiene varias palabras (por ejemplo, 'la media luna'), no se devuelve ningún resultado . Pero si trato de buscar con una sola palabra, por ejemplo, 'media luna', obtengo todos los resultados que quiero.

Estoy indexando los datos con lo siguiente:

String LocationOfDirectory = "C:\\dir\\index";

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_34);
Directory Index = new SimpleFSDirectory(LocationOfDirectory);

IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE.34, analyzer);
IndexWriter w = new IndexWriter(index, config);


Document doc = new Document();
doc.add(new Field("Street", "the crescent", Field.Store.YES, Field.Index.Analyzed);

w.add(doc);
w.close();

Mis búsquedas funcionan así:

int numberOfHits = 200;
String LocationOfDirectory = "C:\\dir\\index";
TopScoreDocCollector collector = TopScoreDocCollector.create(numberOfHits, true);
Directory directory = new SimpleFSDirectory(new File(LocationOfDirectory));
IndexSearcher searcher = new IndexSearcher(IndexReader.open(directory);

WildcardQuery q = new WildcardQuery(new Term("Street", "the crescent");

searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;

He intentado intercambiar la consulta comodín por una consulta de frase, primero con la cadena completa y luego dividir la cadena en un espacio en blanco y envolverla en una BooleanQuery como esta:

String term = "the crescent";
BooleanQuery b = new BooleanQuery();
PhraseQuery p = new PhraseQuery();
String[] tokens = term.split(" ");
for(int i = 0 ; i < tokens.length ; ++i)
{
    p.add(new Term("Street", tokens[i]));
}
b.add(p, BooleanClause.Occur.MUST);

Sin embargo, esto no funcionó. Intenté usar un KeywordAnalyzer en lugar de un StandardAnalyzer, pero luego todos los otros tipos de búsqueda dejaron de funcionar también. He intentado reemplazar espacios con otros caracteres (+ y @) y convertir consultas desde y hacia este formulario, pero eso todavía no funciona. Creo que no funciona porque + y @ son caracteres especiales que no están indexados, pero parece que no puedo encontrar una lista en ninguna parte de los caracteres que son así.

Estoy empezando a volverme un poco loco, ¿alguien sabe lo que estoy haciendo mal?

Gracias, Rik

Respuestas a la pregunta(8)

Su respuesta a la pregunta