我想改变elasticsearch中的评分系统,以摆脱计算术语的多个外观.例如,我想:
"得克萨斯州得克萨斯州"
和
"得克萨斯"
以同样的分数出来.我发现这个映射,elasticsearch表示会禁用术语频率计数,但我的搜索没有得出相同的分数:
"mappings":{
"business": {
"properties" : {
"name" : {
"type" : "string",
"index_options" : "docs",
"norms" : { "enabled": false}}
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
任何帮助将不胜感激,我还没有找到很多关于此的信息.
编辑:
我正在添加我的搜索代码以及使用explain时返回的内容.
我的搜索代码:
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "escluster").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300));
SearchRequest request = Requests.searchRequest("businesses")
.source(SearchSourceBuilder.searchSource().query(QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("name", "Texas")
.minimumShouldMatch("1")))).searchType(SearchType.DFS_QUERY_THEN_FETCH);
ExplainRequest request2 = client.prepareIndex("businesses", "business")
Run Code Online (Sandbox Code Playgroud)
当我用解释搜索时,我得到:
"took" : 14,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"failed" : 0
},
"hits" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java API实现弹性搜索的内部命中,但我找不到任何关于它的文档或其他人正在使用的示例.我有我的JSON搜索,其工作方式如下:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "locations",
"filter": {
"geo_distance": {
"distance": "20km",
"locations.address.geoLocation": {
"lat": 38.07061,
"lon": -76.77514
}
}
},
"inner_hits": {}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在elasticsearch库中看到了InnerHitsBuilder和addInnerHit方法,但我找不到有关如何使用它们的文档.