我们可以对solr同义词txt文件中的词应用模糊吗
Can we apply fuzzy for the words in solr synonym txt file
如果文档被索引,我们需要搜索与 synonym.For 示例匹配的记录,其中一个字段的值在不同的记录 worst 和 不好。我有一个 synonym.txt 配置了 words bad, worst,dreadful 作为同义词文件字段类型为text_general,在analyzer类型查询中配置同义词过滤。
当用户查询 可怕 时,returns 记录具有 坏 和 最差 来自索引文档。当我用 fuzzy 搜索 dreadf~2 时,没有 return 任何记录,期望 bad 和 worst 的记录。这怎么可能存档。我们能否实现自定义代码来实现此要求,因为用户甚至可能输入同义词的拼写错误。
下面是schema.xml
中的字段配置
<fieldType name="text_general" class="solr.TextField"
positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer> </fieldType>
<field name="emotion" type="text_general"/>
感谢您提供架构。如果您输入 dreadf~2,则不会触发同义词,因为 dreadf 不匹配任何内容。
如果你调试查询你会看到这个可怕的:
+title:"(worst dreadful) bad"
这是可怕的~2:
name="parsedquery_toString">+title:"dreadf 2"</str>
您可能需要 dreadf 的同义词或搜索 dreadful~2
注意这篇link讨论了查询时同义词扩展的一些缺点:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
我遇到的情况与此非常相似。在我的电影搜索项目中,我将我的同义词定义为
doctor,dr,dr.
我原来的查询是
http://localhost:8983/solr/bestFilms/select?q=default_search_field:(doctor~2)&fl=title,director,year_released,leading_actors,description
不幸的是,这行不通,因为如果我输入“医生”作为搜索词,它不会生成“Caligari 博士的内阁”。
我所做的是将查询更改为:
http://localhost:8983/solr/bestFilms/select?q=default_search_field:(doctor~2%20OR%20doctor)&fl=title,director,year_released,leading_actors,description
本质上是(括号中的剥离编码)
doctor~2 OR doctor
产生令人满意的结果,所以我想 OR 表达式的第二部分现在是匹配同义词的部分。
如果文档被索引,我们需要搜索与 synonym.For 示例匹配的记录,其中一个字段的值在不同的记录 worst 和 不好。我有一个 synonym.txt 配置了 words bad, worst,dreadful 作为同义词文件字段类型为text_general,在analyzer类型查询中配置同义词过滤。
当用户查询 可怕 时,returns 记录具有 坏 和 最差 来自索引文档。当我用 fuzzy 搜索 dreadf~2 时,没有 return 任何记录,期望 bad 和 worst 的记录。这怎么可能存档。我们能否实现自定义代码来实现此要求,因为用户甚至可能输入同义词的拼写错误。
下面是schema.xml
中的字段配置<fieldType name="text_general" class="solr.TextField"
positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer> </fieldType>
<field name="emotion" type="text_general"/>
感谢您提供架构。如果您输入 dreadf~2,则不会触发同义词,因为 dreadf 不匹配任何内容。
如果你调试查询你会看到这个可怕的:
+title:"(worst dreadful) bad"
这是可怕的~2:
name="parsedquery_toString">+title:"dreadf 2"</str>
您可能需要 dreadf 的同义词或搜索 dreadful~2
注意这篇link讨论了查询时同义词扩展的一些缺点:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
我遇到的情况与此非常相似。在我的电影搜索项目中,我将我的同义词定义为
doctor,dr,dr.
我原来的查询是
http://localhost:8983/solr/bestFilms/select?q=default_search_field:(doctor~2)&fl=title,director,year_released,leading_actors,description
不幸的是,这行不通,因为如果我输入“医生”作为搜索词,它不会生成“Caligari 博士的内阁”。
我所做的是将查询更改为:
http://localhost:8983/solr/bestFilms/select?q=default_search_field:(doctor~2%20OR%20doctor)&fl=title,director,year_released,leading_actors,description
本质上是(括号中的剥离编码)
doctor~2 OR doctor
产生令人满意的结果,所以我想 OR 表达式的第二部分现在是匹配同义词的部分。