Solr查询单字符

Solr查询单字符,solr,lucene,solrj,Solr,Lucene,Solrj,我有一个字段类型,定义如下。现在,我已经定义了此字段类型的字段“StatusCode”,它包含一个字符,如a或P。我已经使用此字段类型为数据编制了索引,并且当我运行StatusCode:a之类的查询时,它不会返回任何结果。有人能解释一下为什么查询不能处理单字符字段吗 <fieldType name="text_exact_fuzzy" class="solr.TextField" omitNorms="false"> <analyzer type="index"&g

我有一个字段类型,定义如下。现在,我已经定义了此字段类型的字段“StatusCode”,它包含一个字符,如a或P。我已经使用此字段类型为数据编制了索引,并且当我运行StatusCode:a之类的查询时,它不会返回任何结果。有人能解释一下为什么查询不能处理单字符字段吗

<fieldType name="text_exact_fuzzy" class="solr.TextField" omitNorms="false">
      <analyzer type="index">
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.StandardFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>           
      </analyzer>
    </fieldType>

将StatusCode这样的字段定义为text\u exact\u fuzzy并使用这些分析器似乎有些奇怪


改用一个简单的StrField,不进行任何分析(如果需要,只使用小写的过滤器工厂),您应该会得到预期的命中率。

首先,我建议您建立一个这样的查询:(好吧,让我们调用包含单字符测试的字段)

查询=测试:p和测试:a


你得到什么结果了吗?

“a”是一个典型的停止词,所以我希望它一般不会被索引。但是,如果搜索“p”无法得到结果,则会发生其他情况。它发生在所有非A的单个字符上。不确定我在这里做错了什么。状态代码字段的模式定义是什么?是的,这是状态代码的模式定义,谢谢!将状态代码更改为“字符串”字段类型有效。我理解文本_exact_fuzzy中定义的分析器对于单字符字段没有意义。但我仍然不明白为什么在这种情况下使用这些分析器会导致查询失败(如果它们处理的是多个字符的单词,那么为什么不处理单个字符呢?)。它们被设计成以不同的方式处理文本,可能最终什么都没有。您可以通过在调试模式下运行查询(使用管理界面)来检查这一点。