Solr - edgengram和数据中的破折号

时间:2014-08-06 07:39:16

标签: solr

我有一个架构,我希望两个字段为edgengram,以便执行"开始 - " -searches。

其中一个字段中的数据仅包含数字,并且有效(查询2仅提供以2开头的数据。另一方面,另一个领域效果不佳。

此字段包含FLB-PROFLB-GJENKF-KFE等类型的数据。例如,当我在此字段中搜索FLB-PRO时,我也会点击{ {1}},这真的不是我在做"开始 - " -search时所期望的。搜索FLB-GJE让我更接近我想要的内容,结果中只包含PRO

由于这两个字段使用相同的类型,我认为它与数据中的破折号有关,但在涉及如何避免此问题时,我非常空白。

我的edgengram字段定义:

FLB-PRO

编辑:更多修修补补,看来查询中的破折号在查询时被视为空格。我已尝试在查询中转义<!-- 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> ,但无法正常工作。

1 个答案:

答案 0 :(得分:2)

原来我必须更改tokenizer,StandardTokenizer将破折号视为空格,因此包含两个字母序列的破折号将被视为两个单词。

通过将tokenizer classquery的{​​{1}}更改为index来解决问题。无论破折号如何,这都会将整个字符串视为一个单词。