5

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

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

1)如何在 solr 中搜索包含

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

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

2)如何解释拼写错误

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

您可以使用 solr 查询语法

4

3 回答 3

8

显然可以使用通配符搜索包含(例如:title:*aaa*将匹配 'aaabbb' 和 'cccaaabbb'),但要小心,因为它不能有效地使用索引。你真的需要这个吗?

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

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

如果您将“导演”字段定义为“text_soundex”,您将能够搜索“Jon”并找到“John”

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

于 2014-03-21T13:02:15.310 回答
1

您要问的事情,第一个绝对可以从 Solr 实现。我不知道soundex。

1)如何在solr中搜索包含 您可以将数据存储到字符串类型的字段或文本类型的字段中。在字符串字段中通过通配符搜索可以得到结果(例如 field1:"John*")。您还应该研究不同类型的分析器。但在一切之前,请查看 Solr 参考http://wiki.apache.org/solr/

于 2014-03-21T09:34:22.520 回答
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*"
于 2016-08-13T07:01:57.143 回答