我使用Nest来构建一个查询,我有一个名为Event的类,它有一个名为Location的属性和一个名为Address的属性(一个字符串),所以索引看起来像这样:
"id" : "something1",
"location": {
"address": "The Club",
}
"id" : "something2",
"location": {
"address": "The Hole",
}
我想创建一个查询,其中用户键入“The Club”(位置变量),它只检索第一个以“The Club”作为地址的项目
这是我当前的查询
var skip = (page - 1) * rows;
var searchResponse = await _elasticClient.SearchAsync<Event>(s => s
.From(skip)
.Size(rows)
.Query(q => q
.QueryString(qs => qs
.Fields(fields => fields
.Field(f => f.Location.Address)
)
.Analyzer("keyword")
.Query("*" + (location ?? string.Empty) + "*")
)
));
当前,查询检索这两个对象,因为它找到了“The”。我需要添加一些东西到我的索引之前或我应该做什么?
我在创建索引时添加了这个,但它没有任何效果
client.Indices.Create(eventsIndex, c => c.Map<Event>(m => m
.Properties(p => p
.Text(t => t
.Name(n => n.Location.Address)
.Analyzer("keyword"))
)
));
1条答案
按热度按时间iklwldmw1#
我有两个建议:
1 -添加stop filter(默认语言英语),这样你就不会产生像“the”这样的单词,所有的停用词都会被删除。现在你只需要匹配“hotel”,“the”会被过滤掉。
托肯
2 -在查询字符串查询中使用default_operator AND。