string q = "m";
Query query = new QueryParser("company", new StandardAnalyzer()).Parse(q+"*");
dará lugar a la consulta de ser un prefixQuery: Compañía: A *¿Por qué esta consulta de Lucene es "contiene" en lugar de "startsWith"?
Aún así voy a obtener resultados como "Flota de África", donde es bastante obvio que el A no está al principio y por lo tanto me da resultados no deseados .
Query query = new TermQuery(new Term("company", q+"*"));
dará lugar a la consulta de ser un termQuery: Compañía: A * y no devolver ningún resultado. Probablemente porque interpreta la consulta como una coincidencia exacta y ninguno de mis valores es el literal "a *".
Query query = new WildcardQuery(new Term("company", q+"*"));
devolverá los mismos resultados que el prefixquery;
¿Qué estoy haciendo mal?
Sin duda, el ejemplo es demasiado farfeched, ¿verdad? ¿No es posible crear una pregunta startwith like sin todo el fuzz? –
No es que yo sepa. Startwith es complicado. Si logra hacer esto, hágamelo saber. Por lo que veo, PrefixQuery significa buscar el comienzo de cualquier término, no solo el primero. –
Esto realmente me sorprende. Startswith debe ser la consulta más fácil de hacer, ¿no? –