我的架构:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0"
splitOnCaseChange="1" splitOnNumerics="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English"
protected="protwords.txt"/>
</analyzer>
</fieldType>
我想工作的组合:
“沃尔玛”、“沃尔玛”、“沃尔玛”、“沃尔玛”、“沃尔玛”
给定这些字符串中的任何一个,我想找到另一个。
因此,有 25 种这样的组合,如下所示:
(第一列表示搜索的输入文本,第二列表示预期匹配)
(Walmart,Walmart)
(Walmart,WalMart)
(Walmart,Wal Mart)
(Walmart,Wal-Mart)
(Walmart,Wal-mart)
(WalMart,Walmart)
(WalMart,WalMart)
(WalMart,Wal Mart)
(WalMart,Wal-Mart)
(WalMart,Wal-mart)
(Wal Mart,Walmart)
(Wal Mart,WalMart)
(Wal Mart,Wal Mart)
(Wal Mart,Wal-Mart)
(Wal Mart,Wal-mart)
(Wal-Mart,Walmart)
(Wal-Mart,WalMart)
(Wal-Mart,Wal Mart)
(Wal-Mart,Wal-Mart)
(Wal-Mart,Wal-mart)
(Wal-mart,Walmart)
(Wal-mart,WalMart)
(Wal-mart,Wal Mart)
(Wal-mart,Wal-Mart)
(Wal-mart,Wal-mart)
我的架构的当前限制:
1. "Wal-Mart" -> "Walmart",
2. "Wal Mart" -> "Walmart",
3. "Walmart" -> "Wal Mart",
4. "Wal-mart" -> "Walmart",
5. "WalMart" -> "Walmart"
分析仪截图:
我尝试了各种过滤器组合以试图解决这些限制,所以我被以下提供的解决方案绊倒了:Solr - case-insensitive search do not work
虽然它似乎克服了我的限制之一(参见#5 WalMart -> Walmart),但总体上比我之前的要差。现在它不适用于以下情况:
(Wal Mart,WalMart),
(Wal-Mart,WalMart),
(Wal-mart,WalMart),
(WalMart,Wal Mart)
besides cases 1 to 4 as mentioned above
架构更改后的分析器:
问题:
为什么“WalMart”与我的初始模式不匹配“Walmart”?Solr 分析器清楚地向我显示它在索引时间内产生了 3 个令牌:
wal
,mart
,walmart
. 在查询期间:它产生了 1 个令牌:(walmart
虽然不清楚为什么它只会产生 1 个令牌),但我不明白为什么它不匹配,因为它walmart
包含在查询和索引令牌中。我在这里提到的问题只是一个用例。还有一些稍微复杂的,例如:
带撇号的单词:“Mc Donalds”、“Mc Donald's”、“McDonald's”、“Mc donalds”、“Mc donald's”、“Mcdonald's”
带有不同标点符号的单词:“Mc-Donald Engineering Company, Inc.”
一般来说,用这种需求对模式进行建模的最佳方法是什么?NGram ? 索引不同字段(不同格式)中的相同数据并使用 copyField 指令(https://wiki.apache.org/solr/SchemaXml#Indexing_same_data_in_multiple_fields)?这对性能有何影响?
编辑:我的 Solr 架构中的默认运算符是 AND。我无法将其更改为 OR。