-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a way to provide a custom Elasticsearch query
Fix #14842
- Loading branch information
1 parent
a79e40f
commit 55f241a
Showing
8 changed files
with
224 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
13 changes: 12 additions & 1 deletion
13
...chardCore.Modules/OrchardCore.Search.Elasticsearch/ViewModels/ElasticSettingsViewModel.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,24 @@ | ||
using System.Collections.Generic; | ||
using Microsoft.AspNetCore.Mvc.ModelBinding; | ||
using Microsoft.AspNetCore.Mvc.Rendering; | ||
|
||
namespace OrchardCore.Search.Elasticsearch.ViewModels | ||
{ | ||
public class ElasticSettingsViewModel | ||
{ | ||
public string Analyzer { get; set; } | ||
|
||
public string SearchIndex { get; set; } | ||
|
||
public IEnumerable<string> SearchIndexes { get; set; } | ||
|
||
public string SearchFields { get; set; } | ||
public bool AllowElasticQueryStringQueryInSearch { get; set; } | ||
|
||
public string DefaultQuery { get; set; } | ||
|
||
public string SearchType { get; set; } | ||
|
||
[BindNever] | ||
public IEnumerable<SelectListItem> SearchTypes { get; set; } | ||
} | ||
} |
74 changes: 51 additions & 23 deletions
74
src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Views/ElasticSettings.Edit.cshtml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,63 @@ | ||
@using OrchardCore.Search.Elasticsearch.Services | ||
|
||
@model ElasticSettingsViewModel | ||
|
||
@if (Model.SearchIndexes.Any()) | ||
{ | ||
<div class="mb-3" asp-validation-class-for="SearchIndex"> | ||
<label asp-for="SearchIndex" class="form-label">@T["Default search index"]</label> | ||
<select asp-for="SearchIndex" class="form-select"> | ||
@foreach (var index in Model.SearchIndexes) | ||
{ | ||
<option value="@index" selected="@(Model.SearchIndex == index)">@index</option> | ||
} | ||
</select> | ||
<span asp-validation-for="SearchIndex"></span> | ||
<span class="hint">@T["The default index to use for the search page."]</span> | ||
</div> | ||
} | ||
else | ||
@if (!Model.SearchIndexes.Any()) | ||
{ | ||
<div class="alert alert-warning">@T["You need to create at least an index to set as the Search index."]</div> | ||
|
||
return; | ||
} | ||
|
||
<div class="mb-3" asp-validation-class-for="SearchFields"> | ||
<div class="mb-3" asp-validation-class-for="SearchIndex"> | ||
<label asp-for="SearchIndex" class="form-label">@T["Default search index"]</label> | ||
<select asp-for="SearchIndex" class="form-select"> | ||
@foreach (var index in Model.SearchIndexes) | ||
{ | ||
<option value="@index" selected="@(Model.SearchIndex == index)">@index</option> | ||
} | ||
</select> | ||
<span asp-validation-for="SearchIndex"></span> | ||
<span class="hint">@T["The default index to use for the search page."]</span> | ||
</div> | ||
|
||
<div class="mb-3" asp-validation-class-for="SearchType"> | ||
<label asp-for="SearchType" class="form-label">@T["Default search index"]</label> | ||
<select asp-for="SearchType" class="form-select" asp-items="Model.SearchTypes" data-raw-type="@ElasticsearchService.RawSearchType"></select> | ||
<span asp-validation-for="SearchType"></span> | ||
</div> | ||
|
||
<div class="mb-3" asp-validation-class-for="DefaultQuery" id="DefaultQueryContainer"> | ||
<label asp-for="DefaultQuery" class="form-label">@T["Default query"]</label> | ||
<textarea asp-for="DefaultQuery" class="form-control" rows="10"></textarea> | ||
<span asp-validation-for="DefaultQuery"></span> | ||
<span class="hint">@T["Create a custom Elasticsearch query to be utilized for each search request. Liquid is supported, so use <code>{0}</code> template as a substitute for the user-provided search term.", "{{ term }}"]</span> | ||
</div> | ||
|
||
<div class="mb-3" asp-validation-class-for="SearchFields" id="DefaultQueryFields"> | ||
<label asp-for="SearchFields" class="form-label">@T["Default searched fields"]</label> | ||
<input asp-for="SearchFields" class="form-control" /> | ||
<span asp-validation-for="SearchFields"></span> | ||
<span class="hint">@T["A comma separated list of fields to use for search pages. The default value is <code>Content.ContentItem.FullText</code>."]</span> | ||
</div> | ||
|
||
<div class="mb-3" asp-validation-class-for="AllowElasticQueryStringQueryInSearch"> | ||
<div class="form-check"> | ||
<input type="checkbox" class="form-check-input" asp-for="AllowElasticQueryStringQueryInSearch" /> | ||
<label class="form-check-label" asp-for="AllowElasticQueryStringQueryInSearch">@T["Allow Elasticsearch \"query string query\" in search forms"]</label> | ||
<span class="hint dashed">@T["Whether search queries should be allowed to use <a href=\"https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-dsl-query-string-query\">Elasticsearch \"query string query\" syntax</a>."] <a class="seedoc" href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-dsl-query-string-query" target="_blank">@T["See documentation"]</a></span> | ||
</div> | ||
</div> | ||
<script at="Foot"> | ||
document.addEventListener('DOMContentLoaded', function () { | ||
const menu = document.getElementById('@Html.IdFor(m => m.SearchType)'); | ||
const queryContainer = document.getElementById('DefaultQueryContainer'); | ||
const fieldsContainer = document.getElementById('DefaultQueryFields'); | ||
menu.addEventListener('change', function (e) { | ||
if (e.target.value == e.target.getAttribute('data-raw-type')) { | ||
queryContainer.classList.remove('d-none'); | ||
fieldsContainer.classList.add('d-none'); | ||
} else { | ||
queryContainer.classList.add('d-none'); | ||
fieldsContainer.classList.remove('d-none'); | ||
} | ||
}); | ||
menu.dispatchEvent(new Event('change')); | ||
}); | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
using System.Text.Json; | ||
|
||
namespace OrchardCore; | ||
|
||
public class JsonHelpers | ||
{ | ||
public static bool IsValid(string json, JsonDocumentOptions options = default) | ||
{ | ||
try | ||
{ | ||
JsonDocument.Parse(json, options); | ||
|
||
return true; | ||
} | ||
catch { } | ||
|
||
return false; | ||
} | ||
|
||
public static bool TryParse(string json, out JsonDocument document, JsonDocumentOptions options = default) | ||
{ | ||
try | ||
{ | ||
document = JsonDocument.Parse(json, options); | ||
|
||
return true; | ||
} | ||
catch { } | ||
|
||
document = null; | ||
return false; | ||
} | ||
} |
Oops, something went wrong.