标签: full-text-indexing

如何为B2B Web应用程序设置Lucene/Solr?

鉴于:

  • 每个客户1个数据库(商业客户)
  • 5000个客户
  • 客户有2到2000个用户(平均约100个用户/客户端)
  • 每个数据库有10万到1000万条记录
  • 用户需要经常搜索这些记录(这是导航数据的最佳方式)

可能相关的信息:

  • 每周有几个新客户(工作时间内的任何时间)
  • 多个Web服务器和数据库服务器(用户可以通过任何Web服务器登录)
  • 让我们对语言或sql品牌保持不可知,因为Lucene(和Solr)有广泛的支持

例如:

Joel Spolsky在播客#11中表示,他的托管网络应用产品FogBugz On-Demand使用Lucene.他有成千上万的按需客户.每个客户都有自己的数据库.

他们为每个客户端使用一个索引并将其存储在客户端的数据库中.我不确定细节.而且我不确定这对Lucene来说是否是一个严肃的模式.

问题:

您将如何设置Lucene搜索,以便每个客户端只能在其数据库中进行搜索?

你会如何设置索引?
你在哪里存储索引?
您是否需要为所有搜索查询添加过滤器?
如果客户取消了,您将如何删除其(部分)索引?(这可能是微不足道的 - 还不确定)

可能的解决方案:

为每个客户端(数据库)创建索引

  • Pro:搜索速度更快(比一个索引所有方法).指数与客户数据的大小有关.
  • Con:我不确定这是什么,也不知道这是否超出了Lucene的范围.

拥有一个带有database_name字段的巨大索引.始终包含database_name作为过滤器.

  • 亲:不确定.也许有利于技术支持或计费部门搜索所有数据库的信息.
  • Con:搜索速度较慢(比每个客户端的索引方法).删除查询过滤器时存在缺陷安全性.

最后一件事:
我也接受使用Solr(Lucene的扩展)的答案.也许它更适合这个问题.不确定.

lucene solr full-text-search b2b full-text-indexing

5
推荐指数
1
解决办法
1244
查看次数

在pymongo中创建文本索引

我有一个存储在字段'h'中的英文单词数据库.我刚刚发现文本索引,我想在这个字段上创建一个以加速正则表达式搜索,但不知何故,我只是无法正确获得语法.我正在使用pymongo 2.7.1和python 3.4.

 from pymongo import MongoClient
 from pymongo import ASCENDING
 from pymongo import DESCENDING
 from pymongo import TEXT
 #...
 collection.create_index('h', TEXT)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

in create_index
raise TypeError("cache_for must be an integer or float.")
TypeError: cache_for must be an integer or float.
Run Code Online (Sandbox Code Playgroud)

请注意,ASCENDING和DESCENDING工作.另外我想将默认语言设置为英语.

regex full-text-indexing mongodb pymongo

5
推荐指数
1
解决办法
4047
查看次数

向 MySql 中的现有表添加全文功能

可能的重复:
MySQL/PHP 搜索效率

如何向 MySQL 中的现有表添加全文功能。

我已经看到在创建表时直接添加它,如下所示。

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title,body)
);
Run Code Online (Sandbox Code Playgroud)

但是创建表格后如何手动添加全文呢?

mysql full-text-search full-text-indexing

4
推荐指数
1
解决办法
6693
查看次数

如何在实体框架数据库迁移中创建全文目录?

我正在尝试在实体框架迁移上创建一个全文目录,但如果我使用以下命令进行迁移:

migrationBuilder.Sql("CREATE FULLTEXT CATALOG[CatalogName]");
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

CREATE FULLTEXT CATALOG statement cannot be used inside a user transaction.
Run Code Online (Sandbox Code Playgroud)

如果我尝试在种子函数中执行此操作,我会得到相同的结果.我已经搜索了这个以及我发现作者要么决定在数据库上手动完成它或其他一些不适用于我的解决方案.

关于如何让这个工作的任何想法?

sql-server entity-framework database-migration full-text-catalog full-text-indexing

4
推荐指数
1
解决办法
866
查看次数

MongoDB Atlas搜索自动完成索引错误评分

我有一个 MongoDB Atlas 搜索索引,其中字段名称具有自动完成类型,并且具有以下属性:

maxGrams : 15
minGrams : 2
tokenization: edgeGram
fold diacritics: true
Run Code Online (Sandbox Code Playgroud)

该集合包含以下名称:

The American
The American Equity Underwriters
The American Prairie Foundation
The American Conservatory Theater
The American Club
Run Code Online (Sandbox Code Playgroud)

使用此自动完成查询:

{
  autocomplete: {
    query: 'The American',
    path: 'name'
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下 searchScore 检索上面的所有名称:

The American Conservatory Theater -> 15.474836349487305
The American Equity Underwriters -> 15.379003524780273
The American Prairie Foundation -> 15.379003524780273
The American Club -> 15.271049499511719
The American -> 13.68109130859375
Run Code Online (Sandbox Code Playgroud)

即使美国是完全匹配的,它也会得到较低的分数。

为什么精确匹配搜索分数低于其他搜索分数?

lucene full-text-indexing mongodb mongodb-atlas mongodb-atlas-search

4
推荐指数
1
解决办法
874
查看次数

如何使MySQL全文索引保持最新?

创建索引MySQL

添加完FULLTEXT索引后,如何使其保持最新状态?

以这种方式添加: ALTER TABLE search_index ADD FULLTEXT(si_fulltext)

试图像这样更新它:

ALTER TABLE search_index MODIFY FULLTEXT(si_fulltext)
ALTER TABLE search_index CHANGE FULLTEXT(si_fulltext)
Run Code Online (Sandbox Code Playgroud)

谢谢,乔

mysql full-text-indexing

3
推荐指数
1
解决办法
2665
查看次数

postgres 9.1全文搜索没有返回结果

我在网上搜索了很多天似乎互联网从来没有听说过我的问题:

我有一个邮政地址数据库表,其中包含大约37M的英国记录,其中包含地理空间索引和衍生的全文索引,如下所示:

create index on gb_locations using gin(to_tsvector('english', "Postcode" || ' ' || "Postcode_outcode" || ' ' || "Road" || ' ' || "Neighbourhood" || ' ' || "Admin2" || ' ' || "Admin3");)
Run Code Online (Sandbox Code Playgroud)

我的全文搜索形式如下:

SELECT * FROM gb_locations
WHERE
    to_tsvector('english', "Postcode" || ' ' || "Postcode_outcode" || ' ' || "Road" || ' ' || "Neighbourhood" || ' ' || "Admin2" || ' ' || "Admin3") @@ plainto_tsquery('english', 'greenham road rg14')
Run Code Online (Sandbox Code Playgroud)

该查询适用于大多数英国地址,特别是在伦敦地区,但对于更远的地方,查询不会返回任何结果.

我已经验证表中存在记录,因为我可以使用地理空间搜索找到它,但对于全文搜索,似乎数据库不知道它.

这是解释:

Bitmap Heap Scan on gb_locations …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search full-text-indexing tsvector psql

3
推荐指数
1
解决办法
904
查看次数

在SQL Server中如何使用TYPE COLUMN选项创建全文索引

我有一个表定义如下

CREATE TABLE [dbo].[Dialogs](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DiscussionID] [int] NOT NULL,
    [ApprovedByUserID] [int] NULL,
    [AddedByUserID] [int] NULL,
    [Text] [nvarchar](max) NULL,
    [ApprovalStatus] [int] NULL,
    [ApprovedOn] [datetime] NULL,
    [AddedOn] [datetime] NOT NULL,
 CONSTRAINT [PK_dbo.Dialogs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

Text列包含用户输入的html.我想创建的全文索引Text列,我还需要支持HTML过滤器,这样,当任何用户类型<div>,<p>或任何其他HTML标记则不会返回任何结果.

要创建索引我在下面使用 SQL

CREATE FULLTEXT INDEX ON [Dialogs]
 ( 
  [Text] …
Run Code Online (Sandbox Code Playgroud)

html sql-server full-text-search full-text-indexing sql-server-2012

3
推荐指数
1
解决办法
2715
查看次数

mongo 中多个 $text 搜索的 $and 运算符

是否可以在 mongo 中对多个 $text 索引搜索使用 $and 运算符?

我的数据库的 tp 集合中有文档

> db.tp.find()
{ "_id" : ObjectId("...."), "name" : "tp", "dict" : { "item1" : "random", "item2" : "some" } }
{ "_id" : ObjectId("...."), "name" : "tp", "dict" : { "item3" : "rom", "item4" : "tttt" } }
Run Code Online (Sandbox Code Playgroud)

然后我做

> db.tp.createIndex({ "$**": "text" })
> db.tp.find({ $and: [{$text : { $search: "random" } }, {$text : { $search: "redruth" } }]})
Run Code Online (Sandbox Code Playgroud)

它失败了

Error: error: {
"waitedMS" : NumberLong(0),
"ok" : …
Run Code Online (Sandbox Code Playgroud)

full-text-indexing mongodb

3
推荐指数
1
解决办法
3432
查看次数

使用 PostgreSQL 索引进行 Django 全文搜索

解决了我在这个问题中提出的问题后,我尝试使用索引来优化 FTS 的性能。我在我的数据库上发出了命令:

CREATE INDEX my_table_idx ON my_table USING gin(to_tsvector('italian', very_important_field), to_tsvector('italian', also_important_field), to_tsvector('italian', not_so_important_field), to_tsvector('italian', not_important_field), to_tsvector('italian', tags));
Run Code Online (Sandbox Code Playgroud)

然后我编辑了模型的 Meta 类,如下所示:

class MyEntry(models.Model):
    very_important_field = models.TextField(blank=True, null=True)
    also_important_field = models.TextField(blank=True, null=True)
    not_so_important_field = models.TextField(blank=True, null=True)
    not_important_field = models.TextField(blank=True, null=True)
    tags = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'my_table'
        indexes = [
            GinIndex(
                fields=['very_important_field', 'also_important_field', 'not_so_important_field', 'not_important_field', 'tags'],
                name='my_table_idx'
            )
        ]
Run Code Online (Sandbox Code Playgroud)

但似乎一切都没有改变。查找所花费的时间与以前完全相同。

这是查找脚本:

from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector

# other unrelated stuff here
vector = …
Run Code Online (Sandbox Code Playgroud)

python django postgresql full-text-search full-text-indexing

3
推荐指数
1
解决办法
2412
查看次数