Apache Solr 搜索 API 个默认结果过滤器
Apache Solr Search API default result filters
我正在使用 Solr 和 apache nutch 来索引网站
我的 json 结果如下所示:
"response": {
"numFound": 0,
"start": 0,
"docs": [
{
"id": "http://mysite.pl/cl-BR/link/link",
"url": "http://mysite.pl/cl-BR/link/link",
"content": [
"content"
],
"_version_": 0000
},
{
"id": "http://mysite.pl/ru-RU/link/link",
"url": "http://mysite.pl/ru-RU/link/link",
"content": [
"content"
],
"_version_": 0000
},
{
"id": "http://mysite.pl/en-EN/link/link",
"url": "http://mysite.pl/en-EN/link/link",
"content": [
"content"
],
"_version_": 0000
},
我想将参数添加到我的查询中,包含有关语言的信息,格式如下:en-EN
接下来 return 仅搜索结果 url 包含我的参数。
例如:
我的查询是:/solr/CoreName/select?q=you&fl=id,ul,content&urlContains=en-EN
我的结果是:
"response": {
"numFound": 0,
"start": 0,
"docs": [
{
"id": "http://mysite.pl/en-EN/link/link",
"url": "http://mysite.pl/en-EN/link/link",
"content": [
"content"
],
"_version_": 0000
},
当我的查询是:/solr/CoreName/select?q=you&fl=id,ul,content&urlContains=ru-RU
我的结果是:
"response": {
"numFound": 0,
"start": 0,
"docs": [
{
"id": "http://mysite.pl/ru-RU/link/link",
"url": "http://mysite.pl/ru-RU/link/link",
"content": [
"content"
],
"_version_": 0000
},
我该怎么做?
cleanest 实现将 add a custom field in your schema, and then use copyField
to copy 从 url
到 url_tokenized
字段的内容。
<copyField source="url" dest="url_tokenized" />
通过 using a PatternTokenizer 你可以告诉 Solr 按 /
拆分标记,这样你就可以在 url_tokenized
字段中得到 ru-RU
作为标记:
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="/"/>
</analyzer>
哪个应该给你这样的东西:
<fieldType name="url_tokenized" class="solr.TextField">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="/"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
通过添加 LowerCaseFilterFactory,我们将确保无论使用何种大小写,都能找到 ru-RU 和 ru-ru。
然后通过对查询字符串应用过滤器查询 (fq
) 来完成查询:
...&fq=url_tokenized:ru-ru
这将限制对 URL 中某处包含“/ru-ru/”的文档的响应。
我正在使用 Solr 和 apache nutch 来索引网站
我的 json 结果如下所示:
"response": {
"numFound": 0,
"start": 0,
"docs": [
{
"id": "http://mysite.pl/cl-BR/link/link",
"url": "http://mysite.pl/cl-BR/link/link",
"content": [
"content"
],
"_version_": 0000
},
{
"id": "http://mysite.pl/ru-RU/link/link",
"url": "http://mysite.pl/ru-RU/link/link",
"content": [
"content"
],
"_version_": 0000
},
{
"id": "http://mysite.pl/en-EN/link/link",
"url": "http://mysite.pl/en-EN/link/link",
"content": [
"content"
],
"_version_": 0000
},
我想将参数添加到我的查询中,包含有关语言的信息,格式如下:en-EN
接下来 return 仅搜索结果 url 包含我的参数。
例如:
我的查询是:/solr/CoreName/select?q=you&fl=id,ul,content&urlContains=en-EN
我的结果是:
"response": {
"numFound": 0,
"start": 0,
"docs": [
{
"id": "http://mysite.pl/en-EN/link/link",
"url": "http://mysite.pl/en-EN/link/link",
"content": [
"content"
],
"_version_": 0000
},
当我的查询是:/solr/CoreName/select?q=you&fl=id,ul,content&urlContains=ru-RU
我的结果是:
"response": {
"numFound": 0,
"start": 0,
"docs": [
{
"id": "http://mysite.pl/ru-RU/link/link",
"url": "http://mysite.pl/ru-RU/link/link",
"content": [
"content"
],
"_version_": 0000
},
我该怎么做?
cleanest 实现将 add a custom field in your schema, and then use copyField
to copy 从 url
到 url_tokenized
字段的内容。
<copyField source="url" dest="url_tokenized" />
通过 using a PatternTokenizer 你可以告诉 Solr 按 /
拆分标记,这样你就可以在 url_tokenized
字段中得到 ru-RU
作为标记:
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="/"/>
</analyzer>
哪个应该给你这样的东西:
<fieldType name="url_tokenized" class="solr.TextField">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="/"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
通过添加 LowerCaseFilterFactory,我们将确保无论使用何种大小写,都能找到 ru-RU 和 ru-ru。
然后通过对查询字符串应用过滤器查询 (fq
) 来完成查询:
...&fq=url_tokenized:ru-ru
这将限制对 URL 中某处包含“/ru-ru/”的文档的响应。