0
我正尝试编写一个Elasticsearch多重匹配查询(使用Java API)来创建一个“搜索即用类型”程序。该查询应用于两个字段,即title
和description
,这些字段被分析为ngram。为什么我的Elasticsearch多重匹配查询仅查找前缀?
我的问题是,似乎Elasticsearch试图找到像我的查询只有字开始。举例来说,如果我搜索“螺母”,然后将其与文档主题为“螺母”匹配“ 坚果”,“花生酱”等,但它不匹配的文档主题为“核桃”其中应与匹配。
这里是我的设置:
{
"index": {
"analysis": {
"analyzer": {
"edgeNGramAnalyzer": {
"tokenizer": "edgeTokenizer",
"filter": [
"word_delimiter",
"lowercase",
"unique"
]
}
},
"tokenizer": {
"edgeTokenizer": {
"type": "edgeNGram",
"min_gram": "3",
"max_gram": "8",
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
这里是我的映射的相关部分:
{
"content": {
"properties": {
"title": {
"type": "text",
"analyzer": "edgeNGramAnalyzer",
"fields": {
"sort": {
"type": "keyword"
}
}
},
"description": {
"type": "text",
"analyzer": "edgeNGramAnalyzer",
"fields": {
"sort": {
"type": "keyword"
}
}
}
}
}
}
这里是我的查询:
new MultiMatchQueryBuilder(query).field("title", 3).field("description", 1).fuzziness(0).tieBreaker(1).minimumShouldMatch("100%")
你有什么想法我可能做错了什么?
太谢谢你了!它的工作原理,你节省了我几个小时的调试! – Daneel
真棒,很高兴它解决了;-) – Val