Java Solr空白提示器/查询分析器

Java Solr空白提示器/查询分析器,java,apache,solr,solrj,search-suggestion,Java,Apache,Solr,Solrj,Search Suggestion,我想知道是否有可能有一个空白提示器?我与该提示器一起工作,但它只提供令牌结果 我正在寻找的示例: Indexed item: b123-456 这被称为B123和456。 现在用户正在寻找b123456。搜索返回0个结果。(如果不返回0个结果,则不应发生这种情况) 现在我想提出一个建议,建议分别使用b123和456 它在几个点上拆分长字母数字,然后查看是否存在标记,如果存在2或3个标记,则得分更高 我可以编写自己的代码,将术语拆分,但这会产生数千个查询以获得一些结果 有没有任何东西显示出这种行

我想知道是否有可能有一个空白提示器?我与该提示器一起工作,但它只提供令牌结果

我正在寻找的示例:

Indexed item: b123-456
这被称为B123和456。 现在用户正在寻找b123456。搜索返回0个结果。(如果不返回0个结果,则不应发生这种情况)

现在我想提出一个建议,建议分别使用b123和456

它在几个点上拆分长字母数字,然后查看是否存在标记,如果存在2或3个标记,则得分更高

我可以编写自己的代码,将术语拆分,但这会产生数千个查询以获得一些结果

有没有任何东西显示出这种行为


如果由于存在大量的可能性而无法使用空格,则建议删除诸如“-”、“/”、“

之类的特殊字符,最好的方法是在“schema.xml”的索引和查询阶段相应地配置字段类型

也就是说,我建议您研究一下索引和查询分析阶段在SOLR中是如何工作的。我猜您应该关注solr.WordDelimiterFilterFactory(参见下面的示例)

下面是一个可能有用的示例。(无担保:-)

祝你好运

<!-- A text field with defaults appropriate for English, plus
     aggressive word-splitting and autophrase features enabled.
     This field is just like text_en, except it adds
     WordDelimiterFilter to enable splitting and matching of
     words on case-change, alpha numeric boundaries, and
     non-alphanumeric chars.  This means certain compound word
     cases will work, for example query "wi fi" will match
     document "WiFi" or "wi-fi".
     -->
    <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
        <analyzer type="index">
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>