问题: 我在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查询语法
答案 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*"