如何列出数据库中具有全文索引的所有表/列?
sql-server indexing full-text-search sql-server-2005 full-text-indexing
我正在运行Sql Server 2008 R2,我需要在具有内部联接的视图上启用全文搜索.我的问题是我不知道如何创建我的全文索引.
当我使用全文索引向导时,我收到此错误.
必须在此表/视图上定义唯一列.
为了让您更好地了解我的问题,请参阅w3school的以下示例http://www.w3schools.com/sql/sql_join_inner.asp最后一个选择只是我的观点.
PersonOrderView - View
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName <- Order by is not important for me
Persons - Table
P_Id (PK, int, not null)
LastName(nvarchar(50), null)
FirstName(nvarchar(50), null)
Address(nvarchar(50), null)
City(nvarchar(50), null)
Orders - Table
O_Id(PK, int, not null)
P_Id(FK, int, not null)
OrderNo(nvarchar(50), not null)
Run Code Online (Sandbox Code Playgroud) 我有一个像这样创建的视图:
CREATE VIEW [dbo].[vwData] WITH SCHEMABINDING
AS
SELECT [DataField1] ,
[DataField2] ,
[DataField3]
FROM dbo.tblData
Run Code Online (Sandbox Code Playgroud)
当我尝试在其上创建全文索引时,如下所示:
CREATE FULLTEXT INDEX ON [dbo].[vwData](
[DataField] LANGUAGE [English])
KEY INDEX [idx_DataField]ON ([ft_cat_Server], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
View 'dbo.vwData' is not an indexed view.
Full-text index is not allowed to be created on it.
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
我们正在开发搜索作为更大系统的一部分。
我们有Microsoft SQL Server 2014 - 12.0.2000.8 (X64) Standard Edition (64-bit)
这个设置:
CREATE TABLE NewCompanies(
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](400) NOT NULL,
[Phone] [nvarchar](max) NULL,
[Email] [nvarchar](max) NULL,
[Contacts1] [nvarchar](max) NULL,
[Contacts2] [nvarchar](max) NULL,
[Contacts3] [nvarchar](max) NULL,
[Contacts4] [nvarchar](max) NULL,
[Address] [nvarchar](max) NULL,
CONSTRAINT PK_Id PRIMARY KEY (Id)
);
Run Code Online (Sandbox Code Playgroud)
Phone
是一个结构化的逗号分隔的数字字符串,如
"77777777777, 88888888888"
Email
是带逗号的结构化电子邮件字符串
"email1@gmail.com, email2@gmail.com"
(或根本不带逗号
"email1@gmail.com"
)Contacts1, Contacts2, Contacts3, Contacts4
是文本字段,用户可以在其中以自由形式指定联系方式。喜欢"John Smith +1 202 555 0156"
或"Bob, +1-999-888-0156, bob@company.com"
。这些字段可以包含我们想要进一步搜索的电子邮件和电话。在这里我们创建全文内容
-- …
Run Code Online (Sandbox Code Playgroud) 我想在查询中惩罚一些术语,而不是完全忽略它们,所以"MUST NOT"操作符不起作用?是否可以在lucene中使用布尔查询中的SHOULD使用否定查询提升,它是如何工作的?
可以使用Sphinx在一个句子中搜索单词.例如,我们有下一个文字:
Васямолодец,съелогурец,т.к.проголодался.Такиедела.
如果我搜索
??????? SENTENCE ??????
Run Code Online (Sandbox Code Playgroud)
我找到了这个文字.如果我搜索
??????? SENTENCE ????????????
Run Code Online (Sandbox Code Playgroud)
我找不到这个文字,因为短语中的点?.?.
被视为句末.
我怎么看,一组分隔符在Sphinx的源代码中是硬编码的.
我的问题是如何改善判刑的检测?更好的方法是使用Yandex的Tomita解析器或另一个nlp库,智能检测句子.
我看到 Neo4j 有支持全文搜索的索引。但是我在文档中找不到关于如何将这种能力用于常规关系查询的示例。
例如,我有以下结构: (:User)->[:Wrote]->(:Review)->[:Reviewing]->(:Movie)
我想使用全文搜索功能搜索评论,但仅针对特定用户。所以用户“123”想搜索他所有的评论,其中包含“伟大的表演”。所以搜索用户的评论将是MATCH (:User { id: 123 })-[w]->(review)
。在搜索带有“伟大”和“表演”字样的评论时CALL db.index.fulltext.queryNodes("reviews", "great acting")
我想不通的是如何将两者与 AND 逻辑结合起来。
编辑
我想我可以做以下事情:
CALL db.index.fulltext.queryNodes("reviews", "great acting") YIELD node as reviews
MATCH (:User { id: 123 })-[w]->(reviews)
Run Code Online (Sandbox Code Playgroud)
问题是,我可能有数百万条评论“很棒”或“表演”,而相关用户可能没有超过 10 条评论。听起来效率不高。
到目前为止,我知道指南针可以处理这项工作.但使用罗盘索引看起来相当昂贵.有没有更轻的替代品?
我应该怎样做才能在App Engine上进行快速,全文的搜索,尽可能少的工作(以及小Java - 我在做Python).
python search google-app-engine full-text-search full-text-indexing
我想弄清楚弹性搜索索引的概念,但不太明白。我想提前说明几点。我了解反向文档索引的工作原理(将术语映射到文档 ID),我也了解基于 TF-IDF 的文档排名如何工作。我不明白的是实际索引的数据结构。在提到弹性搜索文档时,它将索引描述为“具有到文档的映射的表”。所以,分片来了!!当您查看弹性搜索索引的典型图片时,它表示如下:
图片没有显示的是实际分区是如何发生的,以及这个 [table -> document] 链接是如何跨多个分片拆分的。例如,每个分片是否垂直拆分表?这意味着倒排索引表仅包含分片上存在的术语。例如,假设我们有 3 个分片,这意味着第一个分片将包含文档 1,第二个分片仅包含文档 2,第三个分片是文档 3。现在,第一个分片索引是否仅包含文档 1 中存在的术语?在这种情况下[蓝色,明亮,蝴蝶,微风,悬垂]。如果是这样,如果有人搜索 [forget],弹性搜索如何“知道”不在分片 1 中搜索,或者每次都搜索所有分片?当您查看集群图像时:
目前尚不清楚 shard1、shard2 和 shard3 中究竟是什么。我们从 Term -> DocumentId -> Document 到“矩形”分片,但分片到底包含什么?
如果有人可以从上面的图片中解释它,我将不胜感激。