我有一个索引,可以返回不同语言的作业。
我需要按照与单一语言对应的单个文本搜索相似的工作。假设我们已将1设置为English的LanguageId。我想搜索与帐户匹配的职位。因此,如果我在下面的查询中编写代码,它将使用所有不同的语言来获取作业。因此,基本上“必须” 查询不会产生任何影响。
GET jobs/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"languageid": "1"
}
}
]
}
},
"suggest": {
"suggestions": {
"text": "acce",
"completion": {
"field": "jobs.suggest",
"size": 30
}
}
}
}
我的映射如下所示
"mappings": {
"jobs": {
"properties": {
"@timestamp": {
"type": "date"
},
"@version": {
"type": "text"
},
"industytype": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"jobs": {
"properties": {
"suggest": {
"type": "completion",
"analyzer": "simple",
"preserve_separators": true,
"preserve_position_increments": true,
"max_input_length": 50
}
}
},
"language": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"updateddate": {
"type": "date"
}
}
}
}
}
答案 0 :(得分:1)
无法在查询时过滤出建议,因为completion
建议者使用FST-在索引时建立的特殊内存数据结构:
通过在索引中加载完成值,然后构建FST,可以在内存中构建Lucene中的Suggester。这可能是一个缓慢的资源密集型过程。并且,一旦索引更改,就需要重建FST。 “实时搜索”是Elasticsearch的口头禅。返回过期的建议,或者每当索引更改时都要求完全重建是不可接受的。 我们现在不再在搜索时构建FST,而是在索引时构建每个细分的FST。
因此,您所能做的就是为您的建议者添加context。上下文也在索引时间与completion
字段一起填充,因此可以在suggest
查询的查询时间使用。另外,此article可能对您有用。