【发布时间】:2020-02-21 09:03:54
【问题描述】:
在 solrconfig.xml 文件中
复制字段
<copyField source="Name" dest="NameKeywords"/>
<copyField source="Keywords" dest="NameKeywords"/>
新字段
<field name="NameKeywords" type="NameKeywordFieldType" indexed="true" stored="true" multiValued="true"/>
自定义字段类型
<fieldType name="NameKeywordFieldType" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.HyphenatedWordsFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.HyphenatedWordsFilterFactory"/>
</analyzer>
</fieldType>
所以,当我使用 NameKeywords 字段搜索任何内容时,没有任何效果(返回空数组)
使用 NameKeywords 搜索的结果
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"q":"NameKeywords:black",
"_":"1582270957982"}},
"response":{"numFound":0,"start":0,"docs":[]
}}
但是当我使用 Name 字段进行搜索时,一切正常。
姓名搜索结果
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"Name:black",
"fl":"Name",
"rows":"2",
"_":"1582270957982"}},
"response":{"numFound":32560,"start":0,"docs":[
{
"Name":"40037 Black And Stripe Top, Black & Stripe / 10"},
{
"Name":"40037 Black And Stripe Top, Black & Stripe / 12"}]
}}
那么 NameKeywords 字段缺少什么?
【问题讨论】:
-
我将“KeywordTokenizerFactory”更改为“StandardTokenizerFactory”并且它的工作..
-
如果你想在空白处分割文本,为什么要使用
KeywordTokenizer?在这种情况下使用StandardTokenizer或WhitespaceTokenizer。 -
你能告诉我哪个最适合搜索和过滤器吗?
-
没有什么是“最适合搜索和过滤器”的。您必须定义与您想要的行为相匹配的行为集 - 每个用例都会有所不同。一般来说,使用相同的字段进行过滤/分面/搜索通常不会给任何一个带来好的体验。为不同的用例和行为使用不同的字段。
标签: solr