En la sintaxis de consulta de Lucene me gustaría combinar * ~ y en una consulta válida similar a: bla ~ * // consulta no válidaPregunta de Lucene: bla ~ * (coincide con palabras que comienzan con algo borroso), ¿cómo?
Significado: Por favor, que coincida con las palabras que comienzan con "bla" o algo similar a "bla".
actualización: Lo que hago ahora, trabaja para pequeñas de entrada, es utilizar la siguiente (fragmento de esquema SOLR):
<fieldtype name="text_ngrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
En caso de que no utilizan SOLR, esto hace lo siguiente.
Indextime: Indique los datos creando un campo que contenga todos los prefijos de mi entrada (corta).
Tiempo de búsqueda: solo use el ~ operador, ya que los prefijos están explícitamente presentes en el índice.
Althoug búsquedas difusas no operan en un número fijo de caracteres, para mi caso simplemente usando ~ no funcionará (a gran diff en el recuento de caracteres). Quiero hacer coincidir, p. Sunla a Sundlaugarvegur. –
por supuesto, si pudiera decirle a lucene que solo coincida con los primeros x caracteres de cada palabra en el índice, usar ~ funcionaría ... –
Tendría que ir más allá de Lucene aquí, usar un algoritmo de comparación de cadenas como Levenstein, Jaro -Winkler, etc. (qv abajo) – Mikos