Solr-数据中的边线和破折号

Solr-数据中的边线和破折号,solr,Solr,我有一个模式,其中我希望两个字段为edengram,以便执行“从开始”搜索 其中一个字段中的数据仅包含数字,并且有效(查询2仅给出以2开头的数据)。另一方面,另一个领域的工作并不那么好 此字段保存类型为FLB-PRO、FLB-GJE、NKF-KFE等的数据。例如,当我搜索此字段时,我也会找到FLB-GJE,这并不是我在“从开始”搜索时所期望的。搜索PRO使我更接近我想要的内容,结果中只包括FLB-PRO 由于这两个字段使用相同的类型,我假设它与数据中的破折号有关,但对于如何避免此问题,我还是一片

我有一个模式,其中我希望两个字段为
edengram
,以便执行“从开始”搜索

其中一个字段中的数据仅包含数字,并且有效(查询
2
仅给出以
2
开头的数据)。另一方面,另一个领域的工作并不那么好

此字段保存类型为
FLB-PRO
FLB-GJE
NKF-KFE
等的数据。例如,当我搜索此字段时,我也会找到
FLB-GJE
,这并不是我在“从开始”搜索时所期望的。搜索
PRO
使我更接近我想要的内容,结果中只包括
FLB-PRO

由于这两个字段使用相同的类型,我假设它与数据中的破折号有关,但对于如何避免此问题,我还是一片空白

我的EdgeGram字段定义:

<!-- Similar to text_general, but does edgengram filtering (~"startswith") -->
<fieldType name="text_general_edgengram" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="40"/>

    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
  </analyzer>
</fieldType>


编辑:再做一些修补,在查询时,似乎查询中的破折号被视为空白。我尝试在查询中转义
-
,但不起作用。

结果证明我必须更改标记器,
标准标记器将破折号视为空白,因此包含由破折号分隔的两个字母序列的查询将被视为两个单词

通过将
query
index
tokenizer类更改为
solr.KeywordTokenizerFactory
进行修复。这将把整个字符串视为一个单词,而不考虑破折号