ElasticSearch-与多个词组/搜索词部分匹配

时间:2018-11-07 15:23:40

标签: java elasticsearch java-ee kibana elastic-stack

我有一个要求可以使部分匹配的关键字/词条以任意顺序输入的结果的提示。

更清楚地说,下面是样本索引

我也尝试使用“字母”令牌生成器和“空白”。

PUT test_index
{
    "settings": {
        "analysis": {
            "analyzer": {
                "custom_analyzer": {
                    "type": "custom",
                    "tokenizer": "letter",
                    "char_filter": [
                        "html_strip"
                    ],
                    "filter": ["lowercase", "asciifolding"]
                }
            }
        }
    },

    "mappings": {
        "doc": {
            "properties": {
                "keyword": {
                    "type": "text",
                    "analyzer": "custom_analyzer"
                }

            }
        }
    }
}

我在示例数据下面插入了

{
"id":1,
"keyword":"blue car"
},
{
"id":2,
"keyword":"blue cars"
},
{
"id":3,
"keyword":"red can"
},
{
"id":4,
"keyword":"control device"
},
{
"id":5,
"keyword":"controlled pressure"
},
{
"id":6,
"keyword":"controller app"
}

当我使用以下模糊查询时,

GET test_index/_search
{
    "query": {
        "fuzzy" : {
            "keyword" : {
                "value": "car",
                "boost": 1.0,
                "fuzziness": 2,
                "prefix_length": 0,
                "max_expansions": 100
            }
        }
    }
}
  • 我得到2个结果,“蓝色汽车”和“红色罐头”,这是不理想的。如果 我设置prefix_length = 3,就可以了。
  • 但是用更长的单词也不会起作用。例如,“控制器” 将从上面的索引“ controller app”中带来2个结果, “受控压力”。
  • 如果我增加prefix_length,则搜索时不会带来“汽车” “汽车”。

请为方案和需求提供解决方案。

简单的一行要求是,结果中应显示任何顺序的部分匹配关键字/搜索词。

非常感谢。

0 个答案:

没有答案