首页 > 解决方案 > 在 elasticsearch 中使用空格标记器自动完成。正确标记空格

问题描述

我有一个要自动完成的弹性索引。

因此,我有一个类型的SuggestField,completion我在其中放置了应该自动完成的文本。

"suggestField" : {
          "type" : "completion",
          "analyzer" : "IndexAnalyzer",
          "search_analyzer" : "SearchAnalyzer",
          "preserve_separators" : true,
          "preserve_position_increments" : true,
          "max_input_length" : 50
        },

使用分析仪:

"IndexAnalyzer" : {
              "filter" : [
                "lowercase",
                "stop",
                "stopGerman",
                "EdgeNGramFilter"
              ],
              "type" : "custom",
              "tokenizer" : "MyTokenizer"
            },
"SearchAnalyzer" : {
              "filter" : [
                "lowercase"
              ],
              "type" : "custom",
              "tokenizer" : "MyTokenizer"
            },

过滤器和分词器:

"filter" : {
            "EdgeNGramFilter" : {
              "type" : "edge_ngram",
              "min_gram" : "1",
              "max_gram" : "50"
            },
            "stopGerman" : {
              "type" : "stop",
              "stopwords" : "_german_"
            }
          },

"tokenizer" : {
            "MyTokenizer" : {
              "type" : "whitespace"
            }
          }

我现在的问题是,如果我查询该字段,则自动完成仅在我从文本开头开始时才有效,而不是针对每个单词。

例如,我的建议字段中有一个值,如下所示: "123-456-789 thisisatest"

如果我搜索我的建议字段,123-我会得到该值作为结果。但是,如果我搜索thisisid 不会得到结果。这是我的查询。

POST myindex/_search?typed_keys=true
 {
  "suggest": {
        "completion-term": {
          "completion" : {
              "field" : "suggestField"
          } ,
          "prefix" : "thisis"
        }
    }
 }

问题:如果我搜索,我如何必须更改上述设置才能获得给定的值thisis

仅供参考:如果我在 kibana 中使用 IndexAnalyzer 进行_analyze查询,123-456-789 thisisatest我会得到(从我的角度来看是正确的)令牌:

1
12
123
123-
123-4
123-45
123-456
123-456-7
123-456-78
123-456-789

t
th
thi
this 
thisi
thisis
thisisa
thisisat 
thisisate 
thisisates 
thisisatest

标签: elasticsearchnest

解决方案


推荐阅读