【发布时间】:2020-06-18 20:41:25
【问题描述】:
我正在尝试通过 NodeJS 在 Elasticsearch 中实现模糊/自动完成搜索。我已经按索引"artist" 对数据进行了索引。这是 ES 中存储数据的示例。
{
"hits": [{
"_index": "artist",
"_type": "_doc",
"_id": "EyejqnAB2pHGVJHwV53Q",
"_score": 1,
"_source": {
"kind": "song",
"artistId": 111051,
"artistName": "Eminem",
"trackName": "Crack a Bottle (feat. Dr. Dre & 50 Cent)",
"collectionName": "Relapse (Deluxe Version)",
"collectionCensoredName": "Relapse (Deluxe Version)",
"artistViewUrl": "https://music.apple.com/us/artist/eminem/111051?uo=4",
"collectionViewUrl": "https://music.apple.com/us/album/crack-a-bottle-feat-dr-dre-50-cent-feat-dr-dre-50-cent/1440558626?i=1440558826&uo=4",
"trackViewUrl": "https://music.apple.com/us/album/crack-a-bottle-feat-dr-dre-50-cent-feat-dr-dre-50-cent/1440558626?i=1440558826&uo=4",
"previewUrl": "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview128/v4/da/a5/c1/daa5c140-2c3d-1f74-40c3-b6e596e52b82/mzaf_7480202713407880256.plus.aac.p.m4a",
"artworkUrl100": "https://is1-ssl.mzstatic.com/image/thumb/Music128/v4/c5/f8/fd/c5f8fdf6-d4c9-85c9-d169-c5d349a44f1c/source/100x100bb.jpg",
"collectionPrice": 12.99,
"releaseDate": "2009-02-02T12:00:00Z",
"collectionExplicitness": "explicit",
"trackExplicitness": "explicit",
"discCount": 1,
"discNumber": 1,
"trackCount": 24,
"trackNumber": 18,
"country": "USA",
"currency": "USD"
}
}]
}
artistName 上方的值为Eminem,问题是当我输入'e' 时,它不显示任何内容,'em'、emi、emin 相同。当我输入emine 然后它开始给出结果。我哪里错了?
【问题讨论】:
-
您有没有机会仔细阅读答案并尝试我建议的方法?
-
如果你想返回结果,因为第一个字符你可以使用 simplequerystring 在输入字符串的尾部附加 *。 elastic.co/guide/en/elasticsearch/reference/current/…
-
@JordiJordi,这会导致通配符查询,这是非常昂贵的,即使使用我的
prefix查询方法也可以实现同样的事情,但我不鼓励只使用 1 个字符,你不要'无法获得高质量的结果及其非常昂贵的结果,请参阅我的回答中的博客,其中更详细地解释了这些权衡 -
@opster-elasticsearch-ninja 我同意,最好使用前缀查询
-
@JordiJordi,酷 :)
标签: javascript node.js typescript elasticsearch elasticsearch-5