【发布时间】:2017-07-05 13:15:50
【问题描述】:
当搜索文本包含空格时,无法在多个字段中搜索值。例如,如果我搜索值“价格”而不是得到结果,但如果我搜索“价格水平”而不是我得到以下错误:
只能在关键字和文本字段上使用前缀查询 - 而不是哪个 是浮点型
我在索引文档中有一个日期字段和一个浮点字段。由于此字段而引发错误。
以下是我创建索引的代码:
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))))
我在索引文档中有动态列,因此我不能使用具有确切字段名称的术语查询。有什么方法可以搜索以“Search_”开头的所有字段而不会出现我上面提到的错误?
【问题讨论】:
-
您的搜索查询中的
prefix查询在哪里?你似乎在做一个query_string查询? -
@RussCam 这是我第一次使用弹性搜索,但不知道为什么会出现这样的错误。可能是因为我的 searchText 变量具有通配符值,例如“price level”。
-
@Sandeep 你解决了这个问题吗?
-
final SimpleQueryStringBuilder queryBuilder = simpleQueryStringQuery(query) .field("*") // search all fields .analyzeWildcard(true).setLenient(true); // analyze wildcard to handle number based fields也许这有帮助
标签: elasticsearch nest