【问题标题】:Elastic search does not return proper result弹性搜索没有返回正确的结果
【发布时间】:2021-02-19 01:48:28
【问题描述】:

我有一些如下所列的旅行。

  • 难忘的伊斯坦布尔
  • 难忘的雅典城逃亡
  • 难忘的罗马城逃亡
  • 难忘的巴黎

我已经在 elasticsearch 中创建了一个索引,如下所述。

string newName = indexName + DateTime.Now.Ticks;
CreateIndexDescriptor createIndexDescriptor = new CreateIndexDescriptor(newName)
    .Settings(s => s
        .NumberOfShards(4)
        .NumberOfReplicas(2)
        .Setting("max_result_window", int.MaxValue)
        .Setting("max_ngram_diff", 25)
        .Analysis(a => a
            .Analyzers(aa => aa
                .Custom("my_analyzer", ca => ca
                     .Tokenizer("standart")
                     .Filters("lowercase", "my_ascii_folding", "my_stemm", "stop")
                    )
                )
            .TokenFilters(t => t
                .AsciiFolding("my_ascii_folding", af => af.PreserveOriginal(true))
                .Stemmer("my_stemm", sm => sm.Language("english"))
                //.EdgeNGram("key_edgengram", ng => ng.MinGram(4).MaxGram(10))
            )
            .Tokenizers(t => t.Standard("standart"))
        )
    )
    .Map<T>(mm => mm.AutoMap().Properties(p => p.SearchAsYouType(t => t.Name(n => n.SearchingArea).Analyzer("my_analyzer"))));

MemoryStream stream = new MemoryStream();
elasticClient.RequestResponseSerializer.Serialize(createIndexDescriptor, stream);
string jsonData = Encoding.UTF8.GetString(stream.ToArray());

var indexResponse = elasticClient.Indices.Create(createIndexDescriptor);

当我尝试搜索“memor”或“memorable”时,它会返回所有这些。但我想搜索“memorab”或“memorabl”它没有返回任何结果。

这是我的搜索查询:

GET /tourIndex/_search
{
  "from": 0,
  "highlight": {
    "fields": {
      "searchingArea": {},
      "route": {}
    },
    "post_tags": [
      "</strong>"
    ],
    "pre_tags": [
      "<strong style='background: #efefef; padding: 3px;'>"
    ]
  },
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "match": {
            "searchingArea": {
              "query": "memorab"
            }
          }
        }
      ]
    }
  },
  "size": 20,
  "sort": [
    {
      "score": {
        "order": "desc"
      }
    }
  ]
}

当我使用“match_phrase_prefix”和“match_phrase”时,结果是一样的。

感谢您的帮助。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    添加一个工作示例

    索引映射:

    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "my_tokenizer",
              "filter": "lowercase"
            }
          },
          "tokenizer": {
            "my_tokenizer": {
              "type": "edge_ngram",
              "min_gram": 4,
              "max_gram": 15,
              "token_chars": [
                "letter",
                "digit"
              ]
            }
          }
        },
        "max_ngram_diff": 25
      },
      "mappings": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "my_analyzer"
          }
        }
      }
    }
    

    索引数据:

    {
      "title": "Memorable Istanbul"
    }
    {
      "title": "Memorable Athens City Escape"
    }
    {
      "title": "Memorable Rome City Escape"
    }
    {
      "title": "Memorable Paris"
    }
    

    搜索查询:

    {
      "query": {
        "match": {
          "title": "memorab"
        }
      }
    }
    

    搜索结果:

    "hits": [
          {
            "_index": "66262920",
            "_type": "_doc",
            "_id": "4",
            "_score": 0.47070155,
            "_source": {
              "title": "Memorable Paris"
            }
          },
          {
            "_index": "66262920",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.41747034,
            "_source": {
              "title": "Memorable Istanbul"
            }
          },
          {
            "_index": "66262920",
            "_type": "_doc",
            "_id": "3",
            "_score": 0.41747034,
            "_source": {
              "title": "Memorable Rome City Escape"
            }
          },
          {
            "_index": "66262920",
            "_type": "_doc",
            "_id": "2",
            "_score": 0.38820273,
            "_source": {
              "title": "Memorable Athens City Escape"
            }
          }
        ]
    

    【讨论】:

    • 感谢您的回答。我会尝试并告诉你。
    • @ypbr 你有没有机会浏览一下答案,期待得到你的反馈:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2019-03-02
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多