使用Lucene.Net的最佳做法是什么?或者我在哪里可以找到一个好的lucene.net使用样本?
ENV:
采集:
文本索引创建:
BasicDBObject keys = new BasicDBObject();
keys.put("name","text");
BasicDBObject options = new BasicDBObject();
options.put("name", "userTextSearch");
options.put("unique", Boolean.FALSE);
options.put("background", Boolean.TRUE);
userCollection.createIndex(keys, options); // using MongoTemplate
Run Code Online (Sandbox Code Playgroud)
文献:
查询:
db.users.find( { "$text" : { "$search" : "LEONEL" } } )
=>找到了db.users.find( { "$text" : { "$search" : "leonel" } } )
=> FOUND(搜索caseSensitive为false)db.users.find( { "$text" : { "$search" : "LEONÉL" } } )
=> FOUND(使用diacriticSensitive搜索为false)db.users.find( { "$text" : { "$search" : "LEONE" } } …
full-text-indexing mongodb mongodb-query aggregation-framework spring-data-mongodb
想知道在弹性搜索中使用多语言索引和搜索的最佳实践或经验是什么.我通读了大量资源,尽可能提炼出可用的索引选项:
每种语言单独的索引;
用于多语言场的多字段类型;
所有可能语言的单独字段.
所以,想知道选择这些选项中的一个或另一个(或者其他一些我错过的)的副作用是什么.我想有更多的索引并没有真正减慢群集的速度(如果它不是一些大量的语言),所以不确定从选择2或3可以得到什么,除了可能更容易维护.
欢迎任何帮助!
我知道全文搜索的一个基本方面是使用倒排索引.因此,使用反向索引,单字查询变得微不足道.假设索引的结构如下:
some-word - > [doc385,doc211,doc39977,...](按等级排序,降序排序)
要回答该单词的查询,解决方案就是在索引中找到正确的条目(需要O(log n)时间)并从索引中指定的列表中显示一些给定数量的文档(例如前10个).
但是那些返回与两个单词相匹配的文档的查询呢?最直接的实现如下:
现在,第三步可能需要O(n log n)时间来执行.对于非常大的A和B,可能使查询缓慢回答.但像谷歌这样的搜索引擎总会在几毫秒内回复他们的答案.所以这不是完整的答案.
一个明显的优化是,由于像谷歌这样的搜索引擎无论如何都没有返回所有匹配的文档,我们不必计算整个交集.我们可以从最小的集合(例如B)开始,并找到足够的条目,这些条目也属于另一个集合(例如A).
但是,我们还不能有以下最糟糕的情况吗?如果我们设置A是与普通单词匹配的文档集,并且集合B是与另一个常用单词匹配的文档集,则可能仍然存在A∩B非常小的情况(即,组合很少).这意味着搜索引擎必须线性地遍历B的所有元素x成员,检查它们是否也是A的元素,以找到符合这两个条件的少数元素.
线性不快.并且您可以使用两个以上的单词进行搜索,因此仅使用并行性肯定不是整个解决方案.那么,这些案例如何优化?大型全文搜索引擎是否使用某种复合索引?布隆过滤器?有任何想法吗?
algorithm indexing search-engine full-text-indexing inverted-index
我试图通过执行自定义Sql使用Entity Framework Migration创建FULL TEXT索引.
我的迁移类看起来像这样:
public partial class DocumentContentFullTextIndex : DbMigration
{
public override void Up()
{
AlterColumn("dbo.Attachments", "ContentType", c => c.String(maxLength: 260));
Sql("CREATE FULLTEXT CATALOG FullTextIndexes AS DEFAULT;", true);
Sql(@"CREATE FULLTEXT INDEX ON [Attachments](
Content
TYPE COLUMN ContentType
Language 'ENGLISH'
)
KEY INDEX [PK_dbo.Attachments]
ON FullTextIndexes;", true);
}
public override void Down()
{
AlterColumn("dbo.Attachments", "ContentType", c => c.String(maxLength: null));
Sql("DROP FULLTEXT INDEX ON [Attachments]");
Sql("DROP FULLTEXT CATALOG FullTextIndexes");
}
}
Run Code Online (Sandbox Code Playgroud)
当我从MSSQL管理工作室运行它时,一切都很完美,SQL完全符合我的预期.
但是当从迁移项目运行时,第二个Sql请求会触发异常
超时已过期.操作完成之前经过的超时时间或服务器没有响应.
带-Verbose标志的完整堆栈跟踪:
Update-Database -ConnectionStringName DatabaseContext -Verbose
Using …
Run Code Online (Sandbox Code Playgroud) full-text-indexing sql-server-2012 ef-migrations entity-framework-6
我使用Lucene.Net来索引和搜索文档,我使用以下代码创建或打开索引(如果存在):
IndexWriter writer = new IndexWriter(@"C:\index", new StandardAnalyzer(), !IndexExists);
...
private bool IndexExists
{
get
{
return ??
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如何IndexExists
以简单的方式实施?我不需要抛出任何异常.
indexing search lucene.net full-text-search full-text-indexing
有没有办法将索引保留在RAM而不是保留在硬盘上?
我们希望更快地进行搜索.
我正在寻找像strpos()这样的函数,它有两个显着的区别:
当然,它必须是一种有效的解决方案,而不仅仅是每根针的循环.我搜索了这个论坛,并且有类似的问题,例如:
但是我们正在寻找它们.我使用strpos只是为了更好地说明我的问题,可能有一些完全不同的东西必须用于此目的.
我知道Zend_Search_Lucene,我感兴趣的是它是否可以用来实现这个以及如何(只是一般的想法)?
非常感谢您的帮助和时间!
我正在尝试使用Postgresql运行全文查询,该查询可以使用通配符来满足部分匹配.
在搜索词后面有一个后缀通配符似乎很容易,但我无法弄清楚如何指定前缀通配符.
例如,我可以使用类似的东西轻松地执行后缀搜索.
SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', 'don:*') )
Run Code Online (Sandbox Code Playgroud)
应该返回匹配"伦敦"的结果
但是,我似乎不能像...那样做前缀搜索
SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don') )
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望在搜索词的前端和末尾添加一个通配符,例如......
SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don:*') )
Run Code Online (Sandbox Code Playgroud)
我可以使用LIKE条件但是我希望能从Postgres中的全文搜索功能中受益.
我试图抓取网站,更具体地Google Site
使用ManifoldCF
具有SAML认证和索引抓取的数据到Apache Solr实现.但是当我抓取URL时,它会让我302
重定向到登录页面然后说RESPONSECODENOTINDEXABLE
.
我不确定我是否正确认证.在manifoldCF中,我们有HTTP basic
身份验证选项NTLM authentication
和Session-based
访问凭证身份验证方法.我使用的Session based
身份验证方法更像是基于表单的身份验证而不是SAML
身份验证.
有没有人使用带有SAML
身份验证的manifoldCF来抓取网站?如果没有manifoldCF
,有人能够通过Apache Nutch实现这一点,因为我担心,它也只提供HTTP
基本Digest
和NTLM
身份验证.
任何见解都会有所帮助.如果有人认为可以轻松完成,可以提供有关该问题的更多信息.基本上,当我抓取https://sites.google.com/a/my-sub-domain.com时,它会重定向到SSO登录页面,并且抓取工具拒绝抓取任何更多,从而产生302错误.这是一个基于内联网的网站.
indexing ×3
lucene ×2
lucene.net ×2
search ×2
.net ×1
algorithm ×1
manifoldcf ×1
mongodb ×1
multilingual ×1
nutch ×1
php ×1
postgresql ×1
saml ×1
solr ×1
sql ×1
strpos ×1