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
进行修复。这将把整个字符串视为一个单词,而不考虑破折号