如何在 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.
字段类型将由 tokenizers
和 filters
组成。
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>
我是 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.
字段类型将由 tokenizers
和 filters
组成。
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>