如何在 SOLR 中查找单复数和不同的措辞情况

How to find singular plural and different wording cases in SOLR

我是 SOLR 的新手,但我想了解如何在 SOLR 中执行单数、复数和不同的措辞搜索。举个例子吧。

例如这是我在 SOLR 中的数据集:

[
 { url: '/my-awesome-url/' },
 { url: '/my-awesome-urls/' },
 { url: '/my-url-awesome/' },
 { url: '/url-awesome-my/' },
 { url: '/hi/' },
 { url: '/foo-bar'}
]

这是我的搜索词my awesome url。是否可以编写一个查询来查找:

[
  { url: '/my-awesome-url/' },
  { url: '/my-awesome-urls/' },
  { url: '/my-url-awesome/' },
  { url: '/url-awesome-my/' }
]

如果可以的话怎么办?我需要了解什么才能编写此类查询?

是的,这是可能的。您可以将字段类型应用于您的字段 url.

字段类型将由 tokenizersfilters 组成。

Tokenisers :标记器的工作是将文本流分解为标记,其中每个标记(通常)是文本中字符的子序列。 Tokenizers 从字符流 (a Reader) 中读取并生成一系列 Token 对象 (a TokenStream)。

Filters :与分词器不同,过滤器的输入是另一个 TokenStream。过滤器的工作通常比标记器的工作更容易,因为在大多数情况下,过滤器会按顺序查看流中的每个标记,并决定是将其传递、替换还是丢弃。

在您的情况下,您可以应用标准分词器。 所有 Tokenizers

小写过滤器、词干过滤器等过滤器。 所有 Filters

您可以尝试为您的字段使用以下字段类型。

<fieldType name="textUrl" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>