弹性搜索Unorderered与ngram匹配的部分短语

时间:2017-10-20 04:30:05

标签: elasticsearch

也许我走错了路线,但我正在尝试设置Elasticsearch以使用Partial Phrase匹配来从句子的任何顺序返回部分单词。 例如。我有以下输入

  • 测试名称
  • 测试人员姓名
  • 名称测试
  • namey mcname face
  • 测试

我希望能够搜索"测试名称" (或"名称测试"),我希望所有这些都返回(希望按分数顺序排序)。我可以进行部分搜索,也可以进行无序搜索,但无法将2组合。我相信这将是一个非常常见的问题。

以下是我的设置

{
"myIndex": {
    "settings": {
        "index": {
            "analysis": {
                "filter": {
                    "mynGram": {
                        "type": "nGram",
                        "min_gram": "2",
                        "max_gram": "5"
                    }
                },
                "analyzer": {
                    "custom_analyser": {
                        "filter": [
                            "lowercase",
                            "mynGram"
                        ],
                        "type": "custom",
                        "tokenizer": "my_tokenizer"
                    }
                },
                "tokenizer": {
                    "my_tokenizer": {
                        "type": "nGram",
                        "min_gram": "2",
                        "max_gram": "5"
                    }
                }
            }
        }
    }
}

}

我的映射

{
"myIndex": {
    "mappings": {
        "myIndex": {
            "properties": {
                "name": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword"
                        }
                    },
                    "analyzer": "custom_analyser"
                }
            }
        }
    }
}

}

我的查询

{
"query": {
    "bool": {
        "must": [{
            "match_phrase": {
                "name": {
                    "query": "test name",
                    "slop": 5
                }
            }
        }]
    }
}

}

非常感谢任何帮助。 提前致谢

1 个答案:

答案 0 :(得分:-1)

不确定您是否找到了解决方法-我敢打赌,您这样做是因为这是一篇很老的文章,但是我一直在寻找相同的东西,并且发现了:Query-Time Search-as-you-type

查找斜坡。