ElasticSearch索引上的多个分析器

dffbzjpn  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(440)

我有一个带有名称字段的索引。我想在这个领域使用soundex分析器和同义词分析器。
我想在一个索引中实现这两个目标。这可能吗?请帮帮我

索引1

  1. {
  2. "settings": {
  3. "index": {
  4. "number_of_shards": "1",
  5. "provided_name": "phonetic_sample",
  6. "creation_date": "1603097131476",
  7. "analysis": {
  8. "filter": {
  9. "my_soundex": {
  10. "replace": "false",
  11. "type": "phonetic",
  12. "encoder": "soundex"
  13. }
  14. },
  15. "analyzer": {
  16. "my_analyzer": {
  17. "filter": [
  18. "lowercase",
  19. "my_soundex"
  20. ],
  21. "tokenizer": "standard"
  22. }
  23. }
  24. }

我询问凯瑟琳并匹配凯瑟琳,凯瑟琳和凯瑟琳

索引2

  1. {
  2. "settings": {
  3. "index": {
  4. "number_of_shards": "1",
  5. "provided_name": "phonetic_synonym",
  6. "creation_date": "1603121439096",
  7. "analysis": {
  8. "filter": {
  9. "synonym": {
  10. "format": "wordnet",
  11. "type": "synonym",
  12. "synonyms": [
  13. "s(100000001,1,'Bill',v,1,0).",
  14. "s(100000001,2,'William',v,1,0).",
  15. "s(100000001,3,'Wilhelm',v,1,0)."
  16. ]
  17. }
  18. },
  19. "analyzer": {
  20. "synonym": {
  21. "filter": [
  22. "synonym"
  23. ],
  24. "tokenizer": "whitespace"
  25. }
  26. }
  27. }

我询问比尔,匹配比尔,威廉和威廉

egmofgnx

egmofgnx1#

您可以将多个字段与多个分析器一起使用。可以为 name 字段,每个字段使用不同的分析器。
下面是修改后的索引Map。
索引Map:

  1. {
  2. "settings": {
  3. "index": {
  4. "analysis": {
  5. "filter": {
  6. "my_soundex": {
  7. "type": "phonetic",
  8. "encoder": "metaphone",
  9. "replace": false
  10. },
  11. "synonym": {
  12. "format": "wordnet",
  13. "type": "synonym",
  14. "synonyms": [
  15. "s(100000001,1,'Bill',v,1,0).",
  16. "s(100000001,2,'William',v,1,0).",
  17. "s(100000001,3,'Wilhelm',v,1,0)."
  18. ]
  19. }
  20. },
  21. "analyzer": {
  22. "synonym": {
  23. "filter": [
  24. "synonym"
  25. ],
  26. "tokenizer": "whitespace"
  27. },
  28. "my_analyzer": {
  29. "filter": [
  30. "lowercase",
  31. "my_soundex"
  32. ],
  33. "tokenizer": "standard"
  34. }
  35. }
  36. }
  37. }
  38. },
  39. "mappings": {
  40. "properties": {
  41. "name": {
  42. "type": "text",
  43. "analzyer": "synonym",
  44. "search_analyzer": "synonym",
  45. "fields": {
  46. "content": {
  47. "type": "text",
  48. "analyzer": "my_analyzer",
  49. "search_analyzer": "my_analyzer"
  50. }
  51. }
  52. }
  53. }
  54. }
  55. }

那么你可以参考 name 以及 name.content 在您的查询中。您的搜索查询如下:

  1. {
  2. "query": {
  3. "multi_match": {
  4. "query": "Bill",
  5. "fields": [
  6. "name",
  7. "name.content"
  8. ],
  9. "type": "most_fields"
  10. }
  11. }
  12. }
展开查看全部

相关问题