整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

一款强大的本地文件内容搜索软件,可搜索文件中的文字

indows作为市场占有率最高的PC操作系统,它有着难以计数的桌面应用,搜索类工具自然不在话下,

•Everything

•Listary

•Wox

但是,这些工具无一例外,都只能用于文件名的搜索,却不能搜索文件的文本内容

我们不得不承认一个事实,搜索文本内容是我们日常工作和学习中非常常见的一个应用场景。

例如,当你写了半天的文档,随手保存之后不知道放在哪里,你只记得其中片段的内容,你可以通过记忆力仅存的片段去搜索文件所在位置。

例如,当你开发了一个庞大的工程,里面涉及几十个代码文件,你想知道有哪些文件中调用了某个库,或者带有你事先留下的标记,你可以通过字符串搜索的方式找到相应的文件。

...

或许,一时之间无法想起,到底还有哪些场景会有这样的需求。但是,总会在某一个时候遇到这种需求的时候却无从下手。

本文即将介绍的这款AnyTXT就可以有效的解决这样一个难题,让你的桌面拥有谷歌搜索引擎一样的功能。

AnyTXT

AnyTXT搜索引擎是一个强大的本地数据全文搜索引擎,它之于PC桌面,就如同谷歌搜索引擎之于Web一样,让我们在短暂的时间内,搜索到系统内想要的内容。


AnyTXT Searcher内置了强大的文档解析引擎,可以在不安装任何其他软件的情况下解析常用文档的文本,并结合内置的高速索引系统来存储文本的元数据。

因此,在使用AnyTXT的时候,它会花费几十秒时间进行初始化,随后你就可以快速的搜索自己想要的内容。这样是它对比于其他类似软件的优势所在,虽然此类应用有很多,但是大多是是边搜索、边解析,这样搜索效率极其低下。

使用AnyTXT搜索器,您可以快速找到计算机上存在的任何包含指定字符串的文件。

AnyTXT不仅在功能方面非常优秀,它在系统支持方面也非常全面,它支持Windows10、8、7、XP、Vista等版本的操作系统。

如同前面提到的那样,AnyTXT之所以能够用于文件全文搜索,是由于它可以解析本地的文件内容,因此,它首先需要具备支持文件格式丰富这项特点。


在文件格式支持方面,AnyTXT支持如下格式,

•普通格式:txt、cpp、html等.

•邮件:Microsoft Outlook.

•Office:Word、PPT、Excel.

•电子书:epub、mobi

•PDF

可以看出,AnyTXT不仅支持PDF、Word、Excel、PPT这些日常工作和学习中经常接触到的文件格式,还可以搜索cpp、html、py这些偏专业性的编码文件,可以说在文件覆盖方面非常全面。


除了支持文件格式全面、丰富之外,它在其他方面做得也非常值得称赞,例如,

速度快:由于它事先解析本地文件并建立本地服务器,所以搜索速度非常迅速。

高亮显示:可以高亮显示搜索结果,便于识别我么想要的内容。

易于使用:安装和使用都非常简单,不需要配置额外的引擎或者辅助工具。

隐私保护:整个索引和所有数据存储在本地服务器上,所有数据均采用AES256高强度加密算法,确保数据安全。

免费:AnyTXT完全免费使用

者:HelloGitHub-追梦人物

搜索是一个复杂的功能,但对于一些简单的搜索任务,我们可以使用 Django Model 层提供的一些内置方法来完成。现在我们来为我们的博客提供一个简单的搜索功能。

概述

博客文章通常包含标题和正文两个部分。当用户输入某个关键词进行搜索后,我们希望为用户显示标题和正文中含有被搜索关键词的全部文章。整个搜索的过程如下:

  1. 用户在搜素框中输入搜索关键词,假设为 “django”,然后用户点击了搜索按钮提交其输入的结果到服务器。
  2. 服务器接收到用户输入的搜索关键词 “django” 后去数据库查找文章标题和正文中含有该关键词的全部文章。
  3. 服务器将查询结果返回给用户。

整个过程就是这样,下面来看看 Django 如何用实现这些过程。

将关键词提交给服务器

先来回顾一下我们的 Django 博客的 Post(文章)模型:

blog/models.py
class Post(models.Model):
    # 标题
    title = models.CharField("标题", max_length=70)
    # 正文
    body = models.TextField("正文")
    
    # 其他属性...
    
	def __str__(self):
        return self.title

先看到第 1 步,用户在搜索框输入搜索关键词,因此我们要在博客上为用户提供一个搜索表单,HTML 表单代码大概像这样:

templates/base.html
<form role="search" method="get" id="searchform" action="{% url 'blog:search' %}">
  <input type="search" name="q" placeholder="搜索" required>
  <button type="submit"><span class="ion-ios-search-strong"></span></button>
</form>

特别注意这里 <input type="search" name="q" placeholder="搜索" required> 中的 name 属性,当用户在这个 input 中输入搜索内容并提交表单后,键入的数据会以键值对的形式提交服务器,这个键的名字就是通过 name 属性指定的。这样服务器就可以根据 name 的值来取得用户输入的内容。

用户输入了搜索关键词并点击了搜索按钮后,数据就被发送给了 Django 后台服务器。表单的 action 属性的值为 {% url 'blog:search' %}(虽然我们还没有写这个视图函数),表明用户提交的结果将被发送给 blog 应用下 search 视图函数对应的 URL。

查找含有搜索关键词的文章

搜索的功能将由 search 视图函数提供,代码写在 blog/views.py 里:

blog/views.py
from django.contrib import messages
def search(request):
    q = request.GET.get('q')
    if not q:
        error_msg = "请输入搜索关键词"
        messages.add_message(request, messages.ERROR, error_msg, extra_tags='danger')
        return redirect('blog:index')
    post_list = Post.objects.filter(Q(title__icontains=q) | Q(body__icontains=q))
    return render(request, 'blog/index.html', {'post_list': post_list})

首先我们使用 request.GET.get('q') 获取到用户提交的搜索关键词。用户通过表单 get 方法提交的数据 Django 为我们保存在 request.GET 里,这是一个类似于 Python 字典的对象,所以我们使用 get 方法从字典里取出键 q 对应的值,即用户的搜索关键词。这里字典的键之所以叫 q 是因为我们的表单中搜索框 input 的 name 属性的值是 q,如果修改了 name 属性的值,那么这个键的名称也要相应修改。

接下来我们做了一个小小的校验,如果用户没有输入搜索关键词而提交了表单,我们就无需执行查询,我们给给用户发一条错误提醒消息,这里使用了 django messages 应用,这在 交流的桥梁:评论功能中讲过。然后将用户重定向到首页。这里的 redirect 函数也在那篇教程中讲过。

如果用户输入了搜索关键词,我们就通过 filter 方法从数据库里过滤出符合条件的所有文章。这里的过滤条件是 title__icontains=q,即 title 中包含(contains)关键字 q,前缀 i 表示不区分大小写。这里 icontains 是查询表达式(Field lookups),我们在之前也使用过其他类似的查询表达式,其用法是在模型需要筛选的属性后面跟上两个下划线。Django 内置了很多查询表达式,建议过一遍 Django 官方留个印象,了解每个表达式的作用,以后碰到相关的需求就可以快速定位到文档查询其用途 Field lookups

此外我们这里从 from django.db.models 中引入了一个新的东西:Q 对象。Q 对象用于包装查询表达式,其作用是为了提供复杂的查询逻辑。例如这里 Q(title__icontains=q) | Q(body__icontains=q) 表示标题(title)含有关键词 q 或者正文(body)含有关键词 q ,或逻辑使用 | 符号。如果不用 Q 对象,就只能写成 title__icontains=q, body__icontains=q,这就变成标题(title)含有关键词 q 正文(body)含有关键词 q,就达不到我们想要的目的。

绑定 URL

有了视图函数后记得把视图函数映射到相应了 URL,如下。

blog/urls.py
urlpatterns = [
    # 其他 url 配置
    path('search/', views.search, name='search'),
]

大功告成,在导航栏尝试输入一些关键词,看看效果吧!

当然这样的搜索功能是非常简略的,难以满足一些复杂的搜索需求。编写一个搜索引擎是一个大工程,好在 django-haystack 这款第三方 app 为我们完成了全部工作。使用它我们可以实现更加复杂的搜索功能,比如全文检索、按搜索相关度排序、关键字高亮等等类似于百度搜索的功能,功能十分强大。当然其使用也会复杂一些,下一篇教程将向大家介绍 django-haystack 结合 Elasticsearch 搜索引擎的使用方法。


『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源

astReport VCL 5新版发布会,2014-12-9 15:00网络直播,免费参加 立即报名,参加者买FastReport旗下所有产品<6折>

添加搜素框或网站搜索功能是为了方便用户能够轻松、快捷地找到自己需要的信息。因此,在网站中添加一个搜索框已经成为网页设计的主流元素之一。添加一个搜索框到网站会使得用户界面更加友好,也能帮助用户轻松愉快地浏览。

下面,小编收集了13个有用的CSS3,HTML5和jQuery搜索表单脚本来帮助大家从头开始创建一个搜索框。希望能够帮助到大家,让我们一起来看看吧!

脉动的CSS3输入搜索框

输入搜索框带有边框和类似脉冲的阴影跳动。

纯CSS的建议搜索框

这是一个使用纯CSS构建扩展建议搜索框的简单教程。

CSS的扩大搜索框

扩大搜索框是一个点击或输入东西时会变宽的一个简单搜索框。

使用CSS转换扩大搜索栏

我们将利用CSS转换扩展了的搜索栏。搜索栏最初在视图中隐藏的,当点击搜索标签时它能顺利地扩展到视图。

在CSS客户端全文检索

使用指数化数据属性、动态样式和CSS3选择器的搜索功能,可以直接实现在CSS的全文检索,而不是JavaScript客户端。

用CSS3和HTML创建搜索框下拉菜单

在本教程中,我们将创建一个平面式的导航和Square UI的搜索下拉菜单。

如何编写一个扩展HTML5/ CSS3的搜索输入字段

在本教程中我们使用两种不同的方法来构建一个扩大搜索字段。

花式搜索框

这是一个奇特的搜索框,非常有意思!

搜索栏动画

CriteriaSearchBox

一种提示选择搜索,像商店类别的搜索框。

jQuery和CSS3的"下一步级别"动画搜索表单

基本的jQuery搜索/过滤器

灵活的搜索框

一个灵活的搜索输入和内部固定宽度的提交按钮来固定边界的宽度。

慧都联合葡萄城产品年终大惠,第二套起,买一送一!11月17日-12月31日,机会不容错过!

本站文章除注明转载外,均为本站原创或翻译