到目前为止,我对一组阿拉伯数据的solr部署工作得很好。干预和规范化都非常棒。
现在的问题是阿拉伯语搜索不起作用除非所有单词都形成一个连续的阶段。例如,让我们说以下短语:
اسمهداودبنأبي
工作正常并给我所需的数据。但是,如果我搜索:
اسمهداودأبي
然后我得到0结果。请注意,第二行只是缺少上面一行中的一个单词。
即使单词在文本本身中没有彼此出现,我也应该能够得到结果。
任何想法都会非常感激。我的架构如下:
<fieldType name="text_general_arabic" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="arabic_stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.ArabicNormalizationFilterFactory"/>
<filter class="solr.ArabicStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="arabic_stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.ArabicNormalizationFilterFactory"/>
<filter class="solr.ArabicStemFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:0)
尝试使用dismax而不是solr普通布尔查询它给你短语搜索和跨字段搜索,因为你做短语查询。
示例:
Q =أحمد+فنان+مجتهد&安培;重量= JSON&安培;缩进=真安培; DEFTYPE = edismax&安培; QF = title_ar + title_en +标题&安培;毫米= 70%25安培;停用词=真安培; lowercaseOperators =真
正如您将在响应中看到我得到匹配但不完全匹配,请检查上面的表达式,您将看到mm(“最小匹配”)设置为70%表示该词组的70%应该匹配。有关详细信息,请参阅(https://wiki.apache.org/solr/ExtendedDisMax) 上述查询的结果是:
{ “responseHeader”:{ “状态”:0, “QTime”:1, “params”:{ “lowercaseOperators”:“true”, “mm”:“70%”, “缩进”:“真实”, “uf”:“title_ar title_en title”, “q”:“أحمدفنانمجتهد”, “qf”:“title_ar title_en title”, “_”:“1393151025195”, “停止词”:“真实”, “wt”:“json”, “defType”:“edismax” } }, “回应”:{ “numFound”:1, “开始”:0, “docs”:[ { “id”:“1”, “标题”:[ “艾哈迈德是受欢迎的艺术家” ] “title_en”:[ “艾哈迈德是受欢迎的艺术家” ] “title_ar”:[ “أحمدفنانمشهور” ] “ version ”:1460824159992938500 } ] } }