我正在使用使用solr的太阳黑子宝石。我已经苦苦挣扎了几天,现在试图让我的用例用于搜索一个字段。
我的桌子上有一个“电子邮件”栏目。我所要做的就是让它返回子串匹配以及完整匹配。
例如给出电子邮件:
bob@gmail.com
我希望能够将其与以下所有内容相匹配:
基本上应该返回任何匹配的3个字符。
我遇到的问题是完全匹配不适用于默认配置。 “bob@gmail.com”不会返回任何结果,因为它在@符号处分割并搜索bob gmail.com但找不到它。
如果我搜索gmail.com等它会起作用。或者,如果我搜索bob,它也会起作用。
所以我已经尝试过六次在类似帖子中找到的建议,并且已经有一些建议可以完全匹配,但部分匹配不再有效。
以下是我现在在schema.xml中的内容
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="40"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="40"/>
</analyzer>
</fieldType>
我正在使用solr.UAX29URLEmailTokenizerFactory tokenizer来匹配电子邮件地址,因为@符号是个问题。我也尝试过简单地在我的搜索中转义@符号(bob \ @gmail.com)并尝试双引号(“bob@gmail.com”),但这些都没有。因此,我必须匹配完整电子邮件的唯一两个标记器是UAX29URLEmailTokenizerFactory和KeyWordTokenizer,但它们都会破坏部分匹配。
这是我第一次尝试使用solr,所以跟我说话,就像我一无所知:)
谢谢!