我有一组来自wikidata(http://www.wikidata.org)的json文档,可以索引到elasticsearch进行搜索。 它有几个领域。例如,如下所示。
{
eId:Q25338
eLabel:"The Little Prince, Little Prince",
...
}
在这里,我要为用户搜索“精确术语”而不是术语的一部分。意思是,如果用户搜索“王子”,我不想在搜索结果中显示此文档。当用户键入整个术语“小王子”或“小王子”时,我想将此json包含在搜索结果中。
我当前的Mappings.json。
"mappings": {
"entity": {
"properties": {
"eLabel": { # want to replace
"type": "text" ,
"index_options": "docs" ,
"analyzer": "my_analyzer"
} ,
"eid": {
"type": "keyword"
} ,
"subclass": {
"type": "boolean"
} ,
"pLabel": {
"type": "text" ,
"index_options": "docs" ,
"analyzer": "my_analyzer"
} ,
"prop_id": {
"type": "keyword"
} ,
"pType": {
"type": "keyword"
} ,
"way": {
"type": "keyword"
} ,
"chain": {
"type": "integer"
} ,
"siteKey": {
"type": "keyword"
},
"version": {
"type": "integer"
},
"docId": {
"type": "integer"
}
}
}
}
答案 0 :(得分:0)
我应该预处理所有逗号分隔的句子(某些eLabel在列表中包含数十个元素),并使其变成一堆不同的文档,并分别创建关键字词字段吗?
这正是您应该做的。 Elasticsearch无法为您处理逗号分隔的列表。它将认为您的数据只是1个完整的字符串。但是,如果您对其进行预处理,然后将结果字段设置为Keyword字段,则效果很好-这正是“关键字”字段类型的设计目的。我建议使用Term query搜索完全匹配。 (与匹配查询相对应,是术语查询does not analyse the incoming query,因此效率更高。)