Count and Highlight matching text in cts:near-query

2 min read 04-10-2024
Count and Highlight matching text in cts:near-query


Counting and Highlighting Matching Text in cts:near-query for Enhanced Search Relevance

Have you ever struggled to understand the relevance of search results when using the cts:near-query function in MarkLogic? It's easy to simply return documents that contain the search terms, but what if you want to highlight the matching text and count how many times it appears within the returned results? This can significantly improve the user experience, providing context and clarity to the search results.

Let's imagine you're building a search application for a news website. You want to find articles where "climate change" and "renewable energy" appear close together, but you also want to show users exactly where these phrases occur within the article and how many times they appear. Here's how you can use cts:near-query and cts:highlight to achieve this:

Original Code Example:

<search:search>
  <search:query>
    cts:near-query(
      cts:word-query("climate change"),
      cts:word-query("renewable energy"),
      10
    )
  </search:query>
</search:search>

This code will return documents where "climate change" and "renewable energy" appear within 10 words of each other. However, it doesn't provide any information about where those phrases occur within the document or how many times they appear.

Enhanced Code Example:

<search:search>
  <search:query>
    cts:near-query(
      cts:highlight(cts:word-query("climate change"), "<em>", "</em>"),
      cts:highlight(cts:word-query("renewable energy"), "<em>", "</em>"),
      10
    )
  </search:query>
  <search:options>
    <search:match-count>true</search:options>
  </search:search>

Explanation:

  • cts:highlight: This function allows you to wrap matching text with HTML tags (e.g., <em>) for highlighting. Here, we use "" as the opening tag and "" as the closing tag.
  • search:match-count: This option in the search:options element enables the counting of matching terms within each returned document. The count will be available as a separate field within the search results.

Benefits:

  • Enhanced User Experience: Highlighting the matching text provides instant visual cues, helping users quickly identify the relevant content within the search results.
  • Improved Search Relevance: The cts:near-query function, combined with highlighting and match-count, provides a more nuanced and contextual understanding of search relevance.
  • Data-Driven Insights: The match-count allows you to analyze the frequency of certain terms within your content, providing valuable data for content optimization and search engine optimization.

Example Output:

Imagine the following snippet from a news article:

"The recent report emphasizes the urgency of addressing climate change through the adoption of renewable energy sources. The report suggests that transitioning to a cleaner energy future is essential for mitigating the impact of climate change."

After applying the enhanced cts:near-query code, the output might look like this:

  • Highlighted Text: "The recent report emphasizes the urgency of addressing climate change through the adoption of renewable energy sources. The report suggests that transitioning to a cleaner energy future is essential for mitigating the impact of climate change."
  • Match Count: 2 (indicating the phrases "climate change" and "renewable energy" appear twice in the snippet)

Conclusion:

By using cts:near-query with highlighting and match-count, you can take your MarkLogic search results to the next level, providing more informative and engaging search experiences for your users. Remember to tailor the highlighting and counting options to match the specific needs of your search application.

Additional Resources: