【发布时间】:2015-01-25 12:02:50
【问题描述】:
我正在使用 sunspot Solr 搜索引擎开发 rails 应用程序,我需要在 Solr 4.1 中索引电话号码。
例如,如果我有电话号码“+12 (456) 789-0101”,我的页面应该由查询创建:
- +12 (456) 789-0101(电话格式正确)
- +12 (456) 789.........(电话左侧部分格式正确)
- .......(456) 789-0101(电话右侧部分格式正确)
.......(456) 789............(电话中间部分格式正确)
124567890101(仅带数字的完整手机)
- 1245678........(电话左半部分有串联号码)
- ............890101(电话右半部分,带连接号码)
- ......567890......(电话的中间部分,带有连接号码)
我知道我可以使用:
-
EdgeNGramFilterFactory用于将手机拆分为 NGram(正面和背面) -
WordDelimiterFilterFactory用于连接号码和拆分电话的零件。
那么,我做了什么:
-
在
shema.xml中创建新的 Solr 字段类型:<fieldType name="phone_number" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="front"/> <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="20" side="back"/> </analyzer> </fieldType><dynamicField name="*_phone" stored="false" type="phone_number" multiValued="true" indexed="true"/> -
将可搜索电话字段定义为“*_phone”类型:
string :work_phone, :as => :work_phone, :stored => true do work_phone.gsub(/\D/, '') if work_phone endstring :mobile_phone, :as => :mobile_phone, :stored => true do mobile_phone.gsub(/\D/, '') if mobile_phone end -
运行重新索引:
bundle exec rake sunspot:rebuild但重新索引完成后它不起作用,我只能通过查询找到结果:“完整手机”和“手机左侧”。用“middle part of phone”和“right part of phone”搜索没有任何结果。
我做错了吗?如何正确使手机部分灼热? 请帮忙。谢谢!
【问题讨论】:
标签: solr sunspot solr4 sunspot-rails sunspot-solr