在ElasticSearch中可以组合通配符匹配和ngram吗?我已经在用3-11长度的纳克了。
作为一个很小的例子,我有记录C1239123和C1230123。用户希望返回这两种情况。这是他们唯一知道的信息:C 123?12。
上面的情况不会在我的完全匹配分析器上工作,因为查询在末尾缺少了3。我当时的印象是通配符匹配会被打破,但是如果我执行类似于上面的搜索,我就会胡说八道。
查询:
.Search<ElasticSearchProject>(a => a
.Size(100)
.Query(q => q
.SimpleQueryString(query => query
.OnFieldsWithBoost(b => b
.Add(f => f.Summary, 2.1)
.Add(f => f.Summary.Suffix("ngram"), 2.0)
.Query(searchQuery))));分析器:
var projectPartialMatch = new CustomAnalyzer
{
Filter = new List<string> { "lowercase", "asciifolding" },
Tokenizer = "ngramtokenizer"
};托肯器:
.Tokenizers(t=>t
.Add("ngramtokenizer", new NGramTokenizer
{
TokenChars = new[] {"letter","digit","punctuation"},
MaxGram = 11,
MinGram = 3
}))编辑:主要目的是让用户告诉搜索引擎的确切位置未知的字符。这保留了匹配顺序。我不记录查询,只有索引字段。
用更多的测试结果编辑2:我简化了前面的示例太多了。这种胡言乱语是由标点符号过滤器造成的。用一个恰当的例子来说,没有胡言乱语,但结果并没有按照相应的顺序返回。看到下面,我不知道为什么前两个结果完全匹配。Ngram不应用于查询。
搜索c.a 123?.7?0按以下顺序给出结果:
发布于 2014-07-28 16:59:52
对于任何想要解决这个问题的人来说,默认情况下通配符都是在ngrammed标记上使用的。我的问题是因为我的查询中包含标点符号,并且在查询中使用了标准分析器(它破坏了标点符号)。
Duc.Duong关于使用Inquisitor插件的建议有助于准确地显示如何分析数据。
https://stackoverflow.com/questions/24662877
复制相似问题