我正在使用Solr with 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
接下来只返回搜索结果,其中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
},
我该怎么做?
答案 0 :(得分:1)
最干净的实施将是您架构中的add a custom field,然后use copyField
to copy内容从url
到url_tokenized
字段。< / p>
<copyField source="url" dest="url_tokenized" />
通过using a PatternTokenizer,您可以告诉Solr按/
拆分令牌,以便在ru-RU
字段中将url_tokenized
作为令牌:
<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
这将限制对包含&#34; / ru-ru /&#34;的文档的响应。在其网址的某处。