在Elastic Search中索引以逗号​​分隔的值字段

我正在使用Nutch爬行网站并将其编入Elastic搜索中。我的网站有元标记,其中一些包含逗号分隔的ID列表(我打算将其用于搜索)。例如:

contentTypeIds =“ 2,5,15”。(注意:没有方括号)。

当ES对此进行索引时,我无法搜索contentTypeIds:5并找不到其contentTypeIds 包含

5的文档;此查询仅返回其contentTypeIds恰好为“ 5”的文档。但是,我确实想查找其contentTypeIds包含5的文档。

在Solr中,这可以通过在schema.xml中将contentTypeIds字段设置为multiValued =“

true”来解决。我找不到如何在ES中执行类似的操作。

我是ES的新手,所以我可能错过了一些东西。谢谢你的帮助!

回答:

创建自定义分析器,该分析器将用逗号将索引文本分成标记。

然后,您可以尝试搜索。如果您不关心相关性,则可以使用过滤器搜索文档。我的示例显示了如何尝试使用术语过滤器进行搜索。

在下面,您可以找到如何使用Sense插件执行此操作。

DELETE testindex

PUT testindex

{

"index" : {

"analysis" : {

"tokenizer" : {

"comma" : {

"type" : "pattern",

"pattern" : ","

}

},

"analyzer" : {

"comma" : {

"type" : "custom",

"tokenizer" : "comma"

}

}

}

}

}

PUT /testindex/_mapping/yourtype

{

"properties" : {

"contentType" : {

"type" : "string",

"analyzer" : "comma"

}

}

}

PUT /testindex/yourtype/1

{

"contentType" : "1,2,3"

}

PUT /testindex/yourtype/2

{

"contentType" : "3,4"

}

PUT /testindex/yourtype/3

{

"contentType" : "1,6"

}

GET /testindex/_search

{

"query": {"match_all": {}}

}

GET /testindex/_search

{

"filter": {

"term": {

"contentType": "6"

}

}

}

希望能帮助到你。

以上是 在Elastic Search中索引以逗号​​分隔的值字段 的全部内容, 来源链接: utcz.com/qa/430811.html

回到顶部