ElasticSearch Nest:只能对关键字和文本字段使用前缀查询 - 而不是float类型

时间:2017-07-05 13:15:51

标签: elasticsearch nest

当搜索文本包含空格时,在多个字段中搜索值不起作用。例如,如果我搜索价值"价格"比我得到的结果,但如果我搜索"价格水平"比我得到以下错误:

  

只能对关键字和文本字段使用前缀查询 - 而不是在哪些字段上   是float

类型

我在索引文档中有一个日期字段和一个浮点字段。由于这个字段而引发错误。

以下是我创建索引的代码:

var createIndexResponse = client.CreateIndex("messages", c => c.Settings(s => s.NumberOfShards(1).NumberOfReplicas(0).Analysis(a => a.Analyzers(anl => anl.Custom("default", ca => ca.Tokenizer("whitespace").Filters(new List<string>() { "lowercase" }))))).Mappings(ms => ms.Map<Object>(m => m.Properties(p => p.Number(s => s.Name("id").Index(false)).Text(s => s.Name("displaytext").Index(false)).Text(s => s.Name("text").Index(false)).Text(s => s.Name("url").Index(false)).Date(d => d.Name("Search_ReceivedOn"))))));

以下是我的搜索查询:

Dim funcMust = New List(Of Func(Of Nest.QueryContainerDescriptor(Of Object), Nest.QueryContainer))()
funcMust.Add(Function(sh) sh.Term("From", UserID) Or sh.Term("To", UserID))

Dim resp = client.Search(Of Object)(Function(s) s.Index("messages").IgnoreUnavailable(True) _
                            .Query(Function(qry) qry.QueryString(Function(qs) qs.Fields("Search_*").Query(searchText).DefaultOperator(Nest.Operator.And))) _
                            .PostFilter(Function(pf) pf.Bool(Function(b) b.Must(funcMust))).From((pageIndex - 1) * pageSize).Take(pageSize).Source(Function(x) x.Includes(Function(f) f.Fields(fields))))

我在索引文档中有动态列,所以我不能使用具有确切字段名称的术语查询。有没有办法搜索以&#34;搜索_&#34;开头的所有字段?我上面提到过没有错误?

1 个答案:

答案 0 :(得分:0)

就我而言,这是当我执行带有空格字符的搜索时发生的。

我通过以下方法解决了这个问题

Elasticsearch-v6.8.6

Map<String, Float> fields = new HashMap<>();
        fields.put("content.keyword", 1f);
        fields.put("name.keyword", 2f);
        fields.put("tag.keyword", 3f);

SimpleQueryStringBuilder queryBuilder = new SimpleQueryStringBuilder(searchQuery);
queryBuilder.fields(fields);
queryBuilder.analyzeWildcard(Boolean.TRUE);