我想索引和搜索小写的关键字。我附上了测试代码,它清楚地说明了我的简单目标。我索引了两个单词,一个用大写字母,然后我搜索并一个接一个地打印出来。为此,我创建了Analyzer,它只将关键字转换为小写(KeywordAnalyzer不使用小写,并且SimpleAnalyzer对非字母字符进行拆分)。我将此分析器用于IndexWriter和QueryParser。然而,由于某些原因,即使我搜索小写的单词(示例中的“bye”),也无法返回大写的单词
程序预期输出:
hello
Bye
实际产量:
he
我给弹性服务器搜索api提供了一个模式“主从式”。
它返回至少包含其中一个(主文档或从文档)的所有文档
它按分数的降序显示结果。
但是,我想将该顺序更改为我的自定义逻辑,即如果一个文档同时包含单词,即Master和Servant,则首先显示该文档
这可以实现吗?使用bool查询
从
bool查询采用了“匹配越多越好”的方法,因此来自每个match子句的分数将相加,以提供每个文档的最终_分数。同时匹配两个子句的文档将比仅匹配一个子句的文档得分更高
根据评论编辑:
为了澄清,我相信你想要这样的东西:
我使用的是Lucene.Net.dll,版本为2.0.0.4
看起来它的IndexWriter类没有用于DeleteDocument或UpdateDocument的方法。我是不是遗漏了什么?如何在这个版本的Lucene.Net中实现删除、更新功能
版本2.1 Lucene.dll似乎支持删除和更新文档:
public virtual void DeleteDocuments(Term term);
public virtual void UpdateDocument(Term term, Doc
我想了解lucene搜索是如何如此快速地工作的。我在网上找不到任何有用的文档。如果你有任何东西(除了lucene源代码)需要阅读,请告诉我
在我的例子中,使用带索引的mysql5文本搜索进行文本搜索查询大约需要18分钟。lucene搜索同一查询只需不到一秒钟。一句话:索引
Lucene为您的文档创建一个索引,使其能够更快地搜索
列表O(N)数据结构和哈希表O(1)数据结构之间的区别是相同的。该列表必须遍历整个集合才能找到您想要的内容。哈希表有一个索引,可以让它准确地找出所需项的位置,并简单地获取
下午好,伙计们
我正在使用SOLR索引搜索我网站上的项目。搜索结果包含项目的平均评分和项目的评论量。结果可以按评分和评论数排序
但是很明显,对于solr索引,这些数字直到数据库(200万行)重新编制索引(可能是每晚完成)后才会更新
你们认为最好的方法是什么 嗯,我认为您应该更改您的db-index同步策略:
第一种方法:提交数据库更改时,还将更改(一批)发布到索引中。您应该编写一个映射器层,将域对象映射到solr文档(请记住,保持不变,如果一切正常,则索引-这对我们来说很好;-))。如果你想实
从schema.xml:
<field name="myfield" type="integer" indexed="true" stored="false"/>
id为5的记录具有值为0的myfield,我通过搜索普通id:5并查看objectXml确认了这一点
搜索id:5和myfield:0不会返回任何记录
但是,搜索id:5和-myfield:1会返回我所期望的记录
为什么?
--
其他信息:
整数类型的定义:
Solr版本:1.4绑定到“整数”字段类型的类是什么?它
Michael链接到的数据非常陈旧且不完整。答案是肯定的,主要是因为C++没有GC线程,内存分配是用C++手工编写的。C++中的引用计数在C++中执行速度更快,因为它编译成机器代码,不像在VM上运行的java。
欲了解更多信息,请参阅Lucene In Action中有关CLucene的免费章节,可从获得。这些基准已经足够古老,现在可以放心地说它们不相关。他们还引用了在相当旧的硬件上的性能。再说一次,对于C版本来说,这可能是一个很好的用例。@Ross:嗯,是的,问题和答案已经有1.5年的历史了,
如中所述,有一个参数可用于指定匹配所需的相似性。的值介于0和1之间,如果值接近1,则仅匹配相似度较高的术语。例如:漫游~0.8
知道我想知道这个参数是否是相对意义上的,也就是说,对于更长的字符串,字符串编辑距离可能更大,并且仍然存在匹配。或者,这意味着一个绝对值,即最多只允许x个替换/删除/插入来进行匹配?搜索术语~sim将找到编辑距离小于长度(术语)*(1-sim)的所有术语。因此roam~0.8将查找编辑距离小于4*(1-.8)=.8 roam的所有术语
编辑:
期限必须大于1/(1-sim
我是否有可能使用Lucene的ShingleanalyzerRapper生成考虑标点符号(即:.\,\;)的双格图?快速示例:如果字段“一二;三四”只提供两个bigram:(一二)和(三四)?您可以创建一个使用基于字母标记器的分析器的ShingleanalyzerRapper字母标记器在非字母处断开输入文本。比如:
public class MyCharAnalyzer extends Analyzer {
public TokenStream tokenStream(String fi
我已经看到了一些类似的问题,但我仍然没有答案。我想我有一个简单的问题
判决
在本文中,只有元文件是重要的,测试生成。
其他事情都无关紧要
我只想索引元文件和测试生成。这意味着我需要精确匹配。
有人能告诉我如何做到这一点吗
代码如下:
Analyzer analyzer = new StandardAnalyzer();
Lucene.Net.Store.Directory directory = new RAMDirectory();
indexWriter iw
我找到了链接
但我不能完全理解
我想在solr查询中使用minmax类函数
我的查询(显示圆形和颜色D的最小、最大和平均价格以及透明度FL和caratweight。(此查询将根据用户的选择动态生成)
(形状:“圆形”)和(颜色:“D”)以及(透明度:“FL”)和(克拉威特:[1至10])
但是如何使用这种函数并选择特定的列呢
现在我有点接近了
通过使用下面的url,我得到了我想要的最小值、最大值、计数和平均值。
但是它是xml格式的。现在我想用cusomize。我想在我的asp.net代码中使用
如果在优化过程中通过IndexWriterConfig将不同的分析器传递给IndexWriter,是否会导致任何问题
谢谢可能不会,因为分析器仅在分析/解析文档时使用,而优化过程中不会使用 你有什么特别的理由这么做吗?我不打算这么做。我只是想确认,如果我只为优化而打开IndexWriter,analyzer将不会有任何效果。
我在1 CA和3 CD环境中为Sitecore中的几种模板类型设置了自定义Lucene索引。这在CD服务器上运行良好,但这似乎使CMS服务器过载。如果我在CMS上注释掉这个索引,它会影响CD服务器上的索引吗 它不应该影响CD服务器,除非在两者之间有某种文件或配置复制,可能会移动索引文件或sitecore配置
另一方面:lucene索引部分对其运行的任何服务器的影响都很小(除非您可能有自定义索引器),因此我有点困惑,因为它会使CMS服务器过载。我使用的是Alex Shyba建议的AdvancedD
各位!
我是Lucene的新人
我正在用lucene做一个简历过滤项目。首先,我想从简历中提取一些基本信息,如bithday等
假设总是有一行字写着生日:1989/10/19或类似的东西。如何用Lucene而不是直接使用正则表达式提取此类信息
目前我发现也许使用PanarQuery会有帮助。但我似乎无法将通配符查询添加到SpanarQuery以匹配生日信息
我完全被绊倒了。有什么好的建议吗?真的很感激 从包含一堆文本和日期格式的Lucene字段中提取日期并没有灵丹妙药。最好的方法是编写一个自定义
我是Lucene的新手。我有一些新闻文本,我正在使用以下字段编制索引:
doc.add(new Field("url", article.getUrl(), TextField.TYPE_STORED));
doc.add(new Field("source", article.getSource(), TextField.TYPE_STORED));
doc.add(new Field("title", article.getArticleTitle(), TextField.TYPE_STO
我不理解Lucene indexwriter的这个问题。打开indexwriter后,添加一些新文档,然后关闭它。使用相同的目录重新打开indexwriter,添加一些新文档。然后所有以前的文件都消失了。我只是不明白它为什么会这样。正如Zincup在上面提到的,在向现有索引添加文档时,需要将deletePolicy设置为false。(添加到这里是为了让这个问题有一个正式的答案。)这永远不会发生。在第一次写入操作之后,是否确保目录包含包含某些内容的索引?你可以试着用Luke来学习,或者只是检查一下
我有一个场景,我将URL存储在Elasticsearch中特定索引中的文档中。有时我会多次得到一个现有的URL。我想使用Elasticsearch增加遇到特定URL的次数。这可以通过使用带有脚本的更新API来实现。然而,这有时似乎是缓慢而复杂的
Elasticsearch中是否有方法在更新现有文档时增强文档?如果是的话,我想我可以用它来衡量点击率,因为每次我遇到一个现有的URL,我都可以提高点击率,这将解决我的所有问题。如果你在更新时更新文档的提升,你无论如何都必须删除并重新索引该文档。它不会为
我利用lucene 4.0来构建我的搜索引擎。我需要在搜索时定义一个过滤器。这样的过滤代码可以正常工作:
public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs)
throws IOException {
String[] target_real_names = {"eMule"};
OpenBitSet obs = new OpenBitSet(contex
我有一个这样的问题
start n = node:node_auto_index('ids:"123", "456" ... ') return n
这里123456是作为单个参数{list}的键列表。现在,当我尝试用Java编写这篇文章时
String q = " START n=node:node_auto_index('key:{ids}') return n "
Map<String, Object> map = new HashMap<String, Object
今天早上,我们收到警报,4节点Elasticsearch集群中的一些计算机磁盘空间不足。我们使用5个分片,单个复制
显示的索引大小与我们看到的磁盘使用情况一致。然而,令人困惑的是,复制的碎片与碎片2和碎片4非常不一致。我知道碎片大小在副本之间可能有所不同;然而,我们看到的尺寸差异是巨大的:
"shards": {
...
"2": [
{
"routing": {
"state": "STARTED",
"primary": true,
elasticsearch是否自动优化过滤器?例如:在“和”过滤器中,如果存在多个分别为gte和lte运营商定义的数字范围过滤器,而不是同时具有lte和gte边界的一个范围过滤器,则会导致任何性能问题吗?ES会自动优化这些过滤器吗
"filter" : {
"and" : [
{
"range" : {
"age" : {
"gte": 10
}
}
},
{
"range"
我已经将我的DefaultIndexConfiguration配置文件更改为基于同义词()进行搜索,效果很好。但是,这是基于文件系统中的xml文件
C:\inetpub\wwwroot\website\Data\synonyms.xml
我想做的是在CMS中管理这些数据。
有人知道如何设置这个xmlSynonymFilePath参数来实现我想要的吗?还是我遗漏了什么?最简单的解决方案是在Sitecore(例如,/Sitecore/system/synonyms)中使用只有一个多行字段的模板创
我的索引中有一个嵌套字段source,如下所示:
"source": [
{
"name": "source_c","type": "type_a"
},
{
"name": "source_c","type": "type_b"
}
]
我使用query\u stringquery和simple\u query\u stringquery来查询type\u a,得到了两个不同的结果
查询字符串
{
"size" :
我想知道对于相同的存储库路径,索引选择逻辑是否更喜欢本地索引定义而不是全局索引定义。不幸的是,我找不到任何关于索引选择算法工作原理的文档。为了使事情更清楚,请考虑下面的例子:
我的索引的全局定义
我的索引的本地定义
索引选择逻辑根据所有索引(本地和全局)计算查询成本。查询使用评估顺序索引中第一个最便宜的索引。您可以通过AEM中的索引调试工具看到这一点。索引选择逻辑根据所有索引(本地和全局)计算查询成本。查询使用评估顺序索引中第一个最便宜的索引。您可以通过AEM中的索引调试工具看到这一点
/oak
我能够在Lucene中获得文档的单字术语频率。我如何做同样的事情,但对于一个多词短语的自定义列表?例如:假设我在文档中有以下文本:
The quick brown fox jumps over the lazy dog.
The quick onyx goblin jumps over the lazy dwarf.
术语频率向量将显示:
Word Frequency
---- ---------
the 4
quick 2
brown
以下是此字段的映射:
"username": {
"type": "text",
"norms": false,
"fields": {
"keyword": {
"type": "keyword"
}
}
},
我有一个偶尔值为“-”的字段:
我单击了“值过滤器”,这是它创建的过滤器:
但是当我搜索这个值时,它说找不到结果
我如何避开“-”呢
我试过“\-”但没有骰子
我尝试按建议检查值是否“存在”,但这也会返回0个结果:
还尝试了!(u存在于k
我有一个小的测试注册表,标题如下:
“桑托斯(圣桑)X阿瓦伊(阿瓦伊)-卡宁德(圣保罗SP)”
如果我尝试搜索任何单词,如“san”或“avi”或“avaí”或“santos”,效果很好。但是如果我尝试搜索“Santos(SAN)X AvaíFC(avi)”,它应该只返回1个reg,并返回所有3个reg
以下是测试数据:
这是分析仪和映射
以下是搜索结果:
提前谢谢
{
"settings": {
"analysis": {
"analyze
标签: Lucene
information-retrievaltf-idf
我将更改lucene中的tf idf算法,因此我创建了一个新的IndexSearcher实例并调用setSimilarity函数
is.setSimilarity(new TFIDFSimilarity() {
@Override
// Computes a score factor based on the fraction of all query terms that a document contains.
// @
我有以下Apache Lucene 7应用程序:
StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
Directory directory = new RAMDirectory();
IndexWriterConfig config = new IndexWriterConfig(standardAnalyzer);
IndexWriter writer = new IndexWriter(directory, config)
还有一些我在网上看到的人使用posting的TermVector方法来获取术语位置。从链接问题中的示例复制粘贴:
IndexReader ir = obtainIndexReader();
Terms tv = ir.getTermVector( doc, field );
TermsEnum terms = tv.iterator();
PostingsEnum p = null;
while( terms.next() != null ) {
p = terms.postings(
我使用org.apache.lucene.search.BooleanQuery.Builder创建简单的布尔查询
我还想使用minimumNumberShouldMatch来指定必须满足的可选布尔子句的最小数量:
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(new TermQuery(new Term("field", "value1")), BooleanClause.Occu
我正在使用:
基巴纳7.9.0
格拉法纳7.1.5
我的问题是,我有一个图形,其中有一个名为“switch”的hostvariable。我可以定义主机,它工作得很好,但是如果我说
@主机名:$switch
主机:$交换机
@主机:$交换机
@主机名:交换机
主机:交换机
@主机:交换机
这已经不起作用了,我的问题在哪里,我该如何把他交给我
谢谢你的帮助
瓦林斯基
标签: Lucene
lucene.nethighlighting
我正在对查询对象调用extracterms(),从查询中提取术语,查询对象是QueryParser.Parse()的结果。我得到了一个哈希表,但每个项都显示为:
Key - term:term
Value - term:term
为什么键和值相同?还有,为什么术语值被复制并用冒号分隔
Highlighter是否只插入标签或执行其他操作?我不仅想得到文本片段,还想突出显示源文本(它足够大)。我试图通过偏移量和术语手动插入标记。但我担心这是否是正确的解决方案
我认为答案可能会有帮助。我认为答案可能
我有一个术语和相关有效载荷的列表。我如何将这些内容放入lucene文档或字段中
以下是我的清单:
List<MyTerm> list = new List<MyTerm>(){
new MyTerm(){
Text = "apple",
Payload = BitConverter.GetBytes(2)
},
new MyTerm(){
Text = "juice",
Payload = BitConverter.GetBytes(5)
}};
我有一个包含供应商信息的数据库:名称和地址(地址、城市、邮政编码和国家/地区字段)。我需要搜索这个数据库并返回一些供应商。在搜索框中,用户可以键入任何内容:供应商名称、部分地址、城市、邮政编码,。。。而且,如果我找不到任何结果,我需要实现一个类似谷歌的“你的意思是什么”功能,向用户提供建议
我考虑过使用Solr/Lucene来做这件事。我已经安装了Solr,使用CSV文件导出了我需要的信息,并基于该文件创建了索引。现在我可以使用Solr.SpellCheckComponent从Solr字段中获得
标签: Lucene
highlightingfragment
我知道如何使用Lucene highlighter,即使用
Highlighter highlighter = new Highlighter(scorer);
String[] fragments = highlighter.getBestFragments(stream, fieldContents, fragmentNumber);
但是我能在原始内容中找到指向这些片段的指针吗?换句话说,我需要知道这些片段从哪里开始,如果可能的话,从哪里结束。如果改用GetBestTextFragmen
请原谅这个问题的潜在N00B性——我仍在试图了解这个非关系型NoSQL的东西
ElasicSearch的性能和简单性给我留下了深刻的印象,但在深入研究实现之前,我有一个映射(临界NoSQL理论)问题要回答
让我们继续使用ElasticSearch文档中的Twitter示例
基本上,我们知道一条推文属于一个用户,而一个用户有很多推文。
这些对象看起来像这样:
user = {'screen_name':'d2kagw', 'id_str':'1234567890', 'favourites_co
我有一个术语计数对的集合,我想在lucene中建立索引。
有没有什么方法可以做到这一点,而不必在我拥有的地方创建“文档”
复制每个术语的次数与计数相同
我的查询也将是类似的形式
我的问题可能不清楚。我的意思是,我没有完整的文档,而是使用了count value这个术语。例如,我有一个表格文件,而不是“玫瑰是玫瑰是玫瑰”的文件:
a 3
玫瑰3
是2
如果我有一个“rose a rose”形式的问题,我将把它表示为
玫瑰2
a 1
我可以用lucene来索引这类数据吗?然后我可以用这种类型的查询
我想构造一个Lucene查询,它只匹配与我指定的术语完全匹配的文档:不更少,也不更多。“不少于”部分很简单:一个包含所有强制性条款的框架。然而,我不知道如何做“不再”部分。本质上,我需要的是一个查询,它说“结果文档不能有我在查询中指定的以外的任何术语。”有什么想法吗?谢谢 我认为您可以按如下方式处理此问题:
您需要创建一个分析器,该分析器将提取令牌,删除重复项,然后按某种顺序连接它们(例如,字典)。因此,如果您有三个文档:
doc1:“lorem ipsum”,doc2:“lorem ips
我尝试使用创建elasticsearch索引
curl -XPUT 'http://localhost:9200/myindex'
但我总是犯以下错误:
{"error":"IndexCreationException[[myindex] failed to create index]; nested: ElasticSearchIllegalArgumentException[[enable_position_increments: false] is not supported anymo
标签: Lucene
elasticsearchelastica
我希望搜索返回与查询字符串完全匹配的结果。
查询字符串包含2个单词
查询:“普通医生”应仅返回普通医生而不是“普通医生”
搜索方法:
$lower = 'general doctor';
$query = new \Elastica\Query\MatchAll();
$tagquery = new \Elastica\Query\Match();
$tagquery->setDefaultField('branchslug');
$tagquery->setFieldBoost
我使用的是lucene.net 3.0.3,我有一个简单的定制分析器和标记器,它们打破了标签上的条款。我对它进行了测量,结果表明索引的速度是使用StandardAnalyzer的两倍(StandardAnalyzer可以做更多的事情)。你知道问题可能是什么,或者是否有更好的解决方案
代码如下
公共类CustomAnalyzer:Analyzer
{
公共覆盖令牌流令牌流(字符串字段名,文本阅读器)
{
返回新的CustomTokenizer(读卡器);
//返回新的字母标记器(读卡器);
}
p
如果我有一个Lucene查询,比如(标题:“foo-bar”和body:baz*)或标题:bat,有没有直接的方法将其传递到Cypher查询中?它看起来像是用来处理START和旧的node\u auto\u index的,但是我不知道如何正确地使用Cypher 2.0
我已尝试将其粘贴到MATCH子句中,但出现无效语法错误:
MATCH (item:Item {...})
RETURN item
我即将编写一个解析器,将Lucene查询转换为参数化的Cypher查询,但我想先检查一下是否有更简
我需要编写lucene查询/过滤器来获取没有特定属性的对象。
我试过。。。ISNULL:“cm:param_name”但id无效
编辑:我在aspect中添加了新属性,但尚未更新的对象在其列出的属性中没有该属性(使用节点浏览器检查) 你能更清楚地解释一下“没有财产”是什么意思吗?您的意思是不希望像“field:value”那样指定字段,而是将过滤器设置为“value”
编辑
您是在动态生成这些字段名,还是这是唯一一个缺少值的字段名?如果只有一个字段可能出现在文档中,也可能不出现在文档中,那么您可
在我的数据库中,我以完整的形式存储年份。例如,201220132014等。这也是它们在我的索引中的存储方式。我还希望在索引中存储最后两位数字。示例12,13,14等。我基本上希望个人能够在2012年和2012年进行关键字搜索
我的主搜索分析器如下所示
@AnalyzerDefs({
@AnalyzerDef(name = "searchtokenanalyzer",
// Split input into tokens according to tokenizer
标签: Lucene
elasticsearchsearch-engine
我正在试图找出实现用户搜索的最佳方式,即根据用户与您的社交距离对用户进行排序,因此,前二级朋友的朋友的朋友,后三级朋友的朋友的朋友的朋友
我在网上找到了一些资源:
1LinkedIn:是他们较旧的字体引擎-他们使用好友列表/邻接列表作为反向索引。LinkedIn还有一个新的搜索架构,名为Lucene,但他们没有提到如何实现社交搜索
2 odnoklassniki.ru:字体搜索首先在个人lucene索引中查找-我假设它基本上是一个仅限于用户邻接列表的索引
我的问题是:
1您将如何在每个用户的基础
标签:elasticsearch Lucene
search-engine
Elasticsearch是否保持多值字段的顺序
即,如果我在字段中输入了以下值:
{
"values": ["one", "two", "three"],
"values_original": ["1", "2", "3"]
}
(假设未分析字段)
我能确保列表的内容总是按照我放在那里的顺序返回吗
在上面的例子中,我想确保“values”中第一个位置的“one”始终对应于“values\u original”中的“1”等
我还可以将其作为嵌套对象保存,即
{
"val
对于我的项目,我需要找出哪些搜索结果被认为是“良好”匹配。目前,分数因查询而异,因此需要以某种方式对其进行规范化。标准化分数将允许选择高于给定阈值的结果
我为Lucene找到了两种解决方案:
我将如何继续并将相同的技术应用于ElasticSearch?或者可能已经有一种解决方案可以与ES一起用于分数标准化?据我搜索,无法从elastic中获得标准化分数。你必须通过两个查询来破解它。首先是一个试点查询(最好是大小为1,但其余所有属性都相同),它将为您获取max\u分数。然后,您可以进行实际
所以我想使用Lucene荧光灯,我遇到了这个例子:
问题是,我正在使用一个更新版本的Lucene,它似乎没有QueryScorer类和其他东西。我正在使用LuceNet 4.8.0.0,如图所示。所以我想知道如何在这个版本的Lucene中做到这一点。Lucene 4.8仍然有。我特别告诉过你我使用的是什么版本的Lucene,甚至链接到了它。我找不到它。如果你能在那里找到它,请告诉我。鉴于Lucene.net 4.8 Beta相当缺乏文档,我链接到了标准Lucene文档的版本,它的意思是等效的。
标签:elasticsearch Lucene
search-enginedismax
我已经试着理解了Demax查询是如何工作的,我想验证我的理解,请看我是否正确理解了它
根据文档,Demax查询是:
"dis_max": {
"queries": [
{
"match": {
"FOO": "ABC"
}
},
{
"match": {
&quo
上一页 1 2 ...
29 30 31 32 33 34 35 ...
下一页 最后一页 共 78 页