Solr搜索使用包含,声音像

时间:2014-03-21 07:10:44

标签: search solr soundex

问题: 我在solr中有一个电影信息。两个字符串字段定义电影标题和导演名称。复制字段定义solr搜索默认值的另一个字段。

我想谷歌像搜索范围有限,如下所示。如何实现它。

1)如何搜索solr for contains

E.g。 a)如果电影导演的名字是“John Cream”,搜索joh将不会返回任何内容。但是,搜索John会返回正确的结果。

b)如果有一个名为 aaabbb 的电影片名和另一个名为 aaa 的片段,则搜索aaa只会返回一个结果。我需要返回两个结果。

2)如何解释拼写错误

E.g。 如果电影导演的名字是“John Cream”,则搜索Jon不会返回任何结果。是否有类似(soundex)实现solr的好声音。如果是这样,如何启用它?

您可以使用solr查询语法

3 个答案:

答案 0 :(得分:7)

使用通配符显然可以搜索包含(例如:title:*aaa*将匹配' aaabbb'以及' cccaaabbb'),但请注意它,因为它没有& #39; t有效地使用索引。你真的需要这个吗?

像搜索这样的soundex可以将solr.PhoneticFilterFactory过滤器应用于索引和查询。要实现这一点,请在架构中定义这样的fieldType:

<fieldType name="text_soundex" class="solr.TextField">
...
<filter class="solr.PhoneticFilterFactory" encoder="Soundex" inject="true"/>
</fieldType>

如果您定义了&#34;导演&#34; field as&#34; text_soundex&#34;你能够搜索&#34; Jon&#34;并找到&#34; John&#34;

有关详细信息,请参阅http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

答案 1 :(得分:1)

你要问的事情,第一个绝对可以从Solr获得。我不知道soundex。

1)如何搜索solr for contains 您可以将数据存储到字段的字符串类型或字段的文本类型中。在通过外卡搜索的字符串字段中,您可以获得结果(例如,字段1:&#34;约翰*&#34;)。您还应该研究不同类型的analyzers。但在所有事情发生之前,请查看Solr参考http://wiki.apache.org/solr/

答案 2 :(得分:1)

def self.get_search_deals(search_q, per = 50)
  data =  Sunspot.search(Deal) do
    fulltext '*'+search_q +'*', fields: :title
    paginate page: page_no, per_page: per
  end
  data.results
end

searchable do
  text    :title
end

just pass string as "*sam*"