ElasticSearch-example.com vs example

q9rjltbz  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(275)

我们正在使用ElasticSearch5.6.9来支持Django1.11服务器上的搜索。
如果我正在索引数据 example.com 寻找 example.com 我得到了搜索结果,但是如果我正在搜索 example 我没有任何搜索结果。
理想情况下,我想 example 以及 example.com 两者都可以工作并返回相同的搜索结果。
我怎样才能得到这种行为?
我想我将不得不改变分析器和标记器相同。
使用 simple 分析仪似乎是正确的选择。前任: POST _analyze { "analyzer": "simple", "text": "example.com" } 退货 example 以及 com 作为单独的代币 { "tokens": [ { "token": "example", "start_offset": 0, "end_offset": 7, "type": "word", "position": 0 }, { "token": "com", "start_offset": 8, "end_offset": 11, "type": "word", "position": 1 } ] } 我认为在索引数据和搜索查询时必须设置相同的分析器/标记器。
我试着设置 analyzersimple 如下所述:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/analyzer.html 不过,现在我还是要寻找 example.com 而不是 example 再加上现在我什么也没看到 highlight 搜索结果的名称。
我很困惑,这是如何导致一个搜索结果,但不是进入 highlight .
我在这里完全不靠谱了吗?

vkc1a9a2

vkc1a9a21#

也许这个例子会对你有所帮助:

Map

PUT /so54071449
{
  "mappings": {
    "doc": {
      "properties": {
        "url": {
          "type": "text",
          "term_vector": "with_positions_offsets",
          "fields": {
            "simple": {
              "type": "text",
              "analyzer": "simple",
              "search_analyzer": "simple",
              "term_vector": "with_positions_offsets"
            }
          }
        }
      }
    }
  }
}

添加文档

POST /so54071449/doc
{
  "url": "example.com"
}

按示例搜索

GET /so54071449/_search
{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["url", "url.simple"]
    }
  },
  "highlight": {
    "fields": {
      "url": {
        "matched_fields": [
          "url",
          "url.simple"
        ]
      }
    }
  }
}

举例说明结果

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.25811607,
    "hits": [
      {
        "_index": "so54071449",
        "_type": "doc",
        "_id": "AWgoEwDT2HOwokHu0yvd",
        "_score": 0.25811607,
        "_source": {
          "url": "example.com"
        },
        "highlight": {
          "url": [
            "<em>example</em>.com"
          ]
        }
      }
    ]
  }
}

按example.com搜索

GET /so54071449/_search
{
  "query": {
    "multi_match": {
      "query": "example.com",
      "fields": ["url", "url.simple"]
    }
  },
  "highlight": {
    "fields": {
      "url": {
        "matched_fields": [
          "url",
          "url.simple"
        ]
      }
    }
  }
}

example.com的结果

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.51623213,
    "hits": [
      {
        "_index": "so54071449",
        "_type": "doc",
        "_id": "AWgoEwDT2HOwokHu0yvd",
        "_score": 0.51623213,
        "_source": {
          "url": "example.com"
        },
        "highlight": {
          "url": [
            "<em>example.com</em>"
          ]
        }
      }
    ]
  }
}

我使用了多个字段来应用两个分析器( standard ,这是默认值 url 现场和 simpleurl.simple 子字段)和 matched_fields 组合高亮显示结果的步骤 url 以及 url.simple 进入一个领域。

相关问题