ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker에서 ElasticSearch로 Full-Text 검색하기(3)
    SERVER DEVELOPMENT/Docker 2023. 3. 5. 17:44

    Docker에서 ElasticSearch로 Full-Text 검색하기(1)

    Docker에서 ElasticSearch로 Full-Text 검색하기(2)

    지난 시간에 이어서, 이번에는 elasticsearch의 검색 결과를 향상 시켜보도록 하겠습니다.

    elasticsearch는 검색 결과를 개선하기 위한 다양한 기능들을 제공합니다.

     

    • Full-text search : ElasticSearch는 복잡한 검색 쿼리를 처리하고 관련성이 높은 결과를 반환할 수 있는 강력한 전체 텍스트 검색 엔진을 제공합니다.
    • Fuzzy search : 퍼지 검색을 사용하면 용어 자체가 정확히 일치하지 않더라도 쿼리 용어와 유사한 용어를 검색할 수 있습니다.
    • Autocomplete : ElasticSearch를 사용하여 자동 완성 기능을 구현하면 사용자가 원하는 콘텐츠를 빠르게 찾을 수 있습니다.
    • Synonyms : ElasticSearch는 동의어 사용을 지원하여 원래 쿼리에 포함되지 않았을 수 있는 관련 용어가 검색 결과에 포함되도록 할 수 있습니다.
    • Highlighting : ElasticSearch는 검색 결과를 강조 표시하는 데 사용할 수 있으므로 사용자가 가장 관련성이 높은 콘텐츠를 빠르고 쉽게 식별할 수 있습니다.

    Fuzzy Search와 Autocomplete 적용 하기

    elasticsearch의 가장 유용한 기능 중 하나인 Fuzzy 검색 및 자동완성을 구현 해봅시다.

    // Docker에서 ElasticSearch로 Full-Text 검색하기(2)에서의 기존 코드
    const searchQuery = async function (query) {
      const { body } = await client.search({
        index: "indexing",
        body: {
          query: {
            match: {
              content: query,
            },
          },
        },
      });
      return body.hits.hits;
    };
    
    // 변경
    const searchQuery = async function (query) {
      const { body } = await client.search({
        index: "indexing",
        body: {
          query: {
          	fuzzy: {
                content: {
                  value: query,
                  fuzziness: 'AUTO'
                },
            }
          },
        },
      });
      return body.hits.hits;
    };

    elasticsearch에서 자동 완성을 구현하려면 "completion"을 사용할 수 있습니다.

    사용자가 입력할 때마다 검색어에 대한 실시간 제안을 제공할 수 있습니다.

    const suggestData = async function (query) {
      const { body } = await client.search({
        index: "indexing",
        body: {
          suggest: {
            suggest_title: {
              prefix: query,
              completion: {
                field: "title.suggest",
              },
            },
          },
        },
      });
    
      return body.suggest.suggest_title[0].options.map((option) => option.text);
    };
    
    suggestData("elk")
      .then((results) => console.log(results))
      .catch((error) => console.error(error));

     위와 같이 검색 결과를 자동완성해서 보여줄 수도 있습니다.

     

    다음 시간에는 마지막으로 Docker에 해당 APP을 배포 해보도록 하겠습니다.

     

     

     

    출처 : https://voskan.host/2023/02/18/full-text-search-with-node-js-and-elasticsearch-on-docker/?mibextid=S66gvF

Designed by Tistory.