Solr在空查询上返回文档 - 如何停止?

时间:2017-10-09 15:52:32

标签: solr

<!-- Search -->
<div class="searchresults">
    <div>
        <div class="searchresultsinput">
            @Html.TextBox("query-box", Model.Search.FreeSearch)
            <input type="image" id="search-btn" class="search-btn" onclick="ExecuteSearch(); return false;" src='@Html.IncludeCDNImagePathWithTimeStamp("Buttons/search-now.png")' />
        </div>
        <div class="searchresultscounts">
            @{
                if (Model.TotalCount > 0)
                {
                    if (Model.Search.LastItemIndex > Model.TotalCount)
                    {
                        <div>Showing @(Model.Search.FirstItemIndex + 1) - @Model.TotalCount of @Model.TotalCount documents.</div>
                    }
                    else
                    {
                        <div>Showing @(Model.Search.FirstItemIndex + 1) - @Model.Search.LastItemIndex of @Model.TotalCount documents.</div>
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(Model.DidYouMean))
                    {
                        <span>Did you mean </span><strong><em><a href="<%= Url.ForQuery(Model.DidYouMean) %>"><%= Model.DidYouMean%></a></em></strong>
                    }
                    else
                    {
                        <div>No results found. Please try a different search term.</div>
                    }
                }
            }

        </div>

我有三个关于内部QA环境的Solr实例和两个关于生产的实例。所有这些几乎都是配置相同的。问题是,即使在搜索框字段中没有输入任何内容,Solr也会返回搜索结果? [网站上的搜索按钮]

任何人都可以请求帮助我在Solr级别做什么来阻止这种情况发生。我希望能够显示一条消息,说明&#34;您搜索输入0结果&#34;如果有人试图用空查询点击搜索按钮。感谢。

2 个答案:

答案 0 :(得分:2)

它不是在空查询上返回文档的Solr。我非常确定你会向Solr发送一些查询,例如&#34; templateid:someId&#34;甚至更多。

您需要做的是检查您的前端是否用户在框中输入任何内容(或在后端但在调用Solr之前调用)并向用户显示正确的消息。

但是,如果您没有看到用于填充搜索结果列表的代码,那么任何人都无法为您提供所需的确切代码。

编辑

您的HTML包含onclick="ExecuteSearch(); return false;"

更改ExecuteSearch功能并添加检查query-box输入值是否为空。如果它是空的,请不要向Solr发送请求。

答案 1 :(得分:2)

如果您的业务规则是在未输入任何内容时显示0结果,则应在视图或服务器层中处理此行为, 之前服务器命中Solr,并且不要点击它一点都不。