teclado simbolo moda hashtracking ejemplos solr

solr - simbolo - hashtag twitter



Solr busca un hashtag o menciona (1)

De acuerdo, entonces, leyendo el parche SOLR-2059 que mencionaste, parece que han reemplazado el atributo handleAsChar en WordDelimiterFactory con el atributo types . Aquí está la especificación para ese atributo de la página de Wiki Solr de Analyzers, Tokenizers y Tokenizers:

types = "wdfftypes.txt" permite tokenización personalizada para este filtro. El archivo debe existir en el directorio solr / conf, y las entradas son de la forma (sin comillas) "% => ALPHA" o "/ u002C => DIGIT". Los tipos permitidos son: INFERIOR, SUPERIOR, ALPHA, DIGIT, ALPHANUM, SUBWORD_DELIM.

Entonces, si tomamos esta documentación, más el ejemplo del archivo de SOLR-2059, recomendaría lo siguiente:

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" types="twittertypes.txt"/>

Luego defina el archivo twittertypes.txt de la siguiente manera y colóquelo en la misma carpeta que su archivo schema.xml en su instancia de Solr (probablemente la carpeta conf).

# A customized type mapping for WordDelimiterFilterFactory # the allowable types are: LOWER, UPPER, ALPHA, DIGIT, ALPHANUM, SUBWORD_DELIM # # the default for any character without a mapping is always computed from # Unicode character properties # Map the $, %, ''.'', and '','' characters to DIGIT # This might be useful for financial data. @ => ALPHA /u0023 => ALPHA

Tenga en cuenta que debe usar el carácter Unicode (UTF-8) para el símbolo hash, ya que se trata como comentario en el archivo de texto.

De acuerdo con toda la documentación, esto debería solucionar su problema y tratar los símbolos # y @ como caracteres alfabéticos, que proporcionarán el comportamiento que está buscando.

Estamos usando la versión 3.5 de Solr para buscar Tweets, estoy usando WordDelimiterFactory con la siguiente configuración, para poder buscar @username de @username o #hashtags :

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" handleAsChar="@#"/>

Vi el siguiente parche, pero parece que no funciona como esperaba, ¿me estoy perdiendo algo?

https://issues.apache.org/jira/browse/SOLR-2059

Pero buscar @username de @username también devuelve resultados para solo nombre de usuario o #hashtag solo devuelve el resultado para hastag. ¿Cómo puedo conseguir esto?

Tipo de campo completo:

<fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> <analyzer type="index"> <charFilter class="solr.HTMLStripCharFilterFactory"/> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> <analyzer type="index"> <charFilter class="solr.HTMLStripCharFilterFactory"/> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> <analyzer type="index"> <charFilter class="solr.HTMLStripCharFilterFactory"/> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" handleAsChar="@#" /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" handleAsChar="@#" /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>