在 Sunspot 中使用 edgeNGram 过滤器

发布于 2025-01-05 02:36:18 字数 1190 浏览 1 评论 0原文

我正在尝试使用 EdgeNGramFilterFactory 来索引名称字段。我尝试模仿 schema.xml

<fieldType name="text_prefix" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="20"  side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldType>

...

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/>

,在我的模型中我有:

searchable do
  text :name, :as => :text_prefix

但是它似乎没有效果。我缺少什么吗?

I am trying to use EdgeNGramFilterFactory to index a name field. I tried mimicking the schema.xml

<fieldType name="text_prefix" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="20"  side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.TrimFilterFactory" />
  </analyzer>
</fieldType>

...

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/>

and in my model I have:

searchable do
  text :name, :as => :text_prefix

However it seems to have no effect. I am missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不气馁 2025-01-12 02:36:18

您的架构看起来不错,除了一件事:您的 text_prefix 字段的类型为 string 而不是 text_prefix,因此它不使用 EdgeNGramFilterFactory

改变这一行

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/>

你应该像这样

<field name="text_prefix" stored="false" type="text_prefix" multiValued="true" indexed="true"/>

Your schema looks good except for one thing: your text_prefix field is of type string and not text_prefix, thus it doesn't use EdgeNGramFilterFactory.

You should change this line

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/>

like this

<field name="text_prefix" stored="false" type="text_prefix" multiValued="true" indexed="true"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文