我如何积极推动缺少某些条款?我在here之前问过这个问题,但反应并不令人满意,因为它不够普遍。
让我们再试一次,有更多的细微差别。
我希望能够区分笔记本电脑和配件。在人类语言中,这是通过缺乏术语来完成的。也就是说,当你说battery
时,你知道通过省略单词lenovo thinkpad battery
,你的意思是你想要实际的笔记本电脑。比较一个人说PUT test_index
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
}
时,他们指的是电池。
假设我们有索引:
PUT test_index/_mapping/merchant
{
"properties": {
"title": {
"type": "string"
},
"category": {
"type": "string",
"index": "not_analyzed"
}
}
}
带映射:
PUT test_index/merchant/3
{
"title": "macbook battery",
"category": "laptops accessories"
}
PUT test_index/merchant/2
{
"title": "lenovo thinkpad battery",
"category": "laptops accessories"
}
PUT test_index/merchant/1
{
"title": "lenovo thinkpad white/black",
"category": "laptops"
}
将两个项目放入其中:
lenovo thinkpad
现在搜索POST test_index/_search
{
"query":{
"match": { "title": "lenovo thinkpad" }
}
}
:
"hits": [
{
"_index": "test_index",
"_type": "merchant",
"_id": "2",
"_score": 0.70710677,
"_source": {
"title": "lenovo thinkpad battery",
"category": "laptops accessories"
}
},
{
"_index": "test_index",
"_type": "merchant",
"_id": "1",
"_score": 0.70710677,
"_source": {
"title": "lenovo thinkpad white/black",
"category": "laptops"
}
}
]
结果是:
lenovo thinkpad battery
通知lenovo thinkpad white/black
高于title
。
现在,我至少可以看到两种合理的方法。
A)在每个类别的基础上使用术语频率来影响battery
匹配的相关性。例如,如果对于每个类别,您提取95%的百分位词,那么laptops accessories
中的battery
是一个高频词,因此title
这个词应该在所有词上被加强category
个问题。
B)在每个类别的基础上使用术语频率来影响title
匹配的相关性。例如,除了标题匹配之外,您还会自动对结果进行负面推送,这些结果的类别包含95%百分位字词,而这些字词未包含在- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
匹配中。
A和B并不完全相同,但它们都依赖于某些缺席词应该被考虑为相关性的想法。
所以......想法?
答案 0 :(得分:0)
我的投票结果是 C) 修复类别,以便电池没有“笔记本电脑”。作为一个类别(它' laptopAccessory'或只是'附件')或者创建一个额外的类别(不称为“笔记本电脑'”)来指示实际的机器他们自己。
在您的搜索中,您不会尝试降低配件的排名,而是应用于笔记本电脑'类别(不再含糊不清)。这将导致初始搜索,如您的lenovo thinkpad'将实际机器放在配件上方。更准确的搜索(' lenovo thinkpad battery')仍然可以正常运行。
另一个不错的UI / UX体验是获取结果中返回的总类别集,并提供简单的过滤器链接。因此,如果您的初始搜索返回笔记本电脑' '配件' '付款计划'然后您将其中的每一个作为重新查询的链接,使用原始搜索加上该类别的过滤器。
祝你好运!答案 1 :(得分:0)
提升“那个”类别。
GET /test_index/merchant/_search
{
"from": 0,
"query": {
"bool": {
"must": [
{"match": {"title": "lenovo thinkpad"}}
],
"should": [
{
"match": {
"category": {
"boost": "2",
"query": "laptops"
}
}
}
]
}
},
"size": "10"
}
<强>结果:强>
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1.573319,
"hits": [
{
"_index": "index",
"_type": "merchant",
"_id": "1",
"_score": 1.573319,
"_source": {
"title": "lenovo thinkpad white/black",
"category": "laptops"
}
},
{
"_index": "index",
"_type": "merchant",
"_id": "2",
"_score": 0.15889977,
"_source": {
"title": "lenovo thinkpad battery",
"category": "laptops accessories"
}
}
]
}
}
有关提升的更多信息,可以是found here
答案 2 :(得分:0)
我们可以使用在查询该术语时提供的boost属性来更新某些术语的缺失。 请检查以下查询,并将boost属性设置为10。
html: '<div id="content"><h1>Content will display here...</h1></div>'