为什么我的Elasticsearch多匹配查询只查找前缀?
我正在尝试编写一个Elasticsearch多匹配查询(使用JavaAPI)来创建一个“键入时搜索”程序。该查询应用于两个字段,为什么我的Elasticsearch多匹配查询只查找前缀?,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我正在尝试编写一个Elasticsearch多匹配查询(使用JavaAPI)来创建一个“键入时搜索”程序。该查询应用于两个字段,title和description,它们被分析为ngrams 我的问题是,Elasticsearch似乎只尝试查找像我的查询一样的开头的单词。例如,如果我搜索“nut”,那么它将匹配具有“nut”、“nuts”、“Nutella”等特征的文档,但它不匹配具有“walnut”特征的文档,而“walnut”应该匹配 以下是我的设置: { "index": {
title
和description
,它们被分析为ngrams
我的问题是,Elasticsearch似乎只尝试查找像我的查询一样的开头的单词。例如,如果我搜索“nut”,那么它将匹配具有“nut”、“nuts”、“Nutella”等特征的文档,但它不匹配具有“walnut”特征的文档,而“walnut”应该匹配
以下是我的设置:
{
"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%")
你知道我可能做错了什么吗?那是因为你使用的是标记器而不是标记器。前者只索引前缀,而后者将索引前缀、后缀以及数据的子部分 将您的analyzer定义改为此,它应按预期工作:
{
"index": {
"analysis": {
"analyzer": {
"edgeNGramAnalyzer": {
"tokenizer": "edgeTokenizer",
"filter": [
"word_delimiter",
"lowercase",
"unique"
]
}
},
"tokenizer": {
"edgeTokenizer": {
"type": "nGram", <---- change this
"min_gram": "3",
"max_gram": "8",
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
{
“索引”:{
“分析”:{
“分析器”:{
“Edgengramalanalyzer”:{
“标记器”:“边缘标记器”,
“过滤器”:[
“单词分隔符”,
“小写”,
“独一无二”
]
}
},
“标记器”:{
“磨边机”:{
“类型”:“nGram”,非常感谢!它工作正常,您为我节省了数小时的调试时间!