2011-09-06 58 views
6

Kính thưa cộng đồng stackoverflow:Xây dựng một đám mây tag với Solr

Với một số văn bản, tôi muốn để có được TOP 50 từ thường gặp nhất trong các văn bản, và tạo ra một đám mây thẻ ra khỏi nó, và do đó hiển thị các ý chính của những gì văn bản là về một cách đồ họa.

Văn bản thực sự là một tập hợp gồm 100 nhận xét PER mỗi ITEM (ảnh) có khoảng 120 mục và tôi cũng muốn giữ cho đám mây được cập nhật - bằng cách giữ các nhận xét được lập chỉ mục và sử dụng đám mây mã thế hệ để chạy mỗi lần yêu cầu web mới xuất hiện.

Tôi định cư bằng cách sử dụng Solr để lập chỉ mục văn bản, và bây giờ tự hỏi làm thế nào để có được 50 từ TOP, trong số Solr TermsVectorComponant. Dưới đây là một ví dụ về các kết quả trả về bởi các componant về vector, sau khi bạn bật tần số hạn bằng cách nói tv.tf="true":

<lst name="doc-5"> 
    <str name="uniqueKey">MA147LL/A</str>  
    <lst name="includes"> 
     <lst name="cabl"><tf>5</tf></lst> 
     <lst name="earbud"><tf>3</tf></lst> 
     <lst name="headphon"><tf>10</tf></lst> 
     <lst name="usb"><tf>11</tf></lst> 
    </lst> 
    </lst> 

    <lst name="doc-9"> 
    <str name="uniqueKey">3007WFP</str> 
    <lst name="includes"> 
     <lst name="cabl"><tf>5</tf></lst> 
     <lst name="usb"><tf>4</tf></lst> 
    </lst> 
    </lst> 

Như bạn thấy tôi có 2 vấn đề:

  1. tôi nhận được tất cả các các thuật ngữ trong tài liệu, cho trường đó, không chỉ trên đầu trang
  2. Và chúng không được sắp xếp theo tần suất, vì vậy tôi phải nhận các điều khoản và sắp xếp nó trong bộ nhớ để làm những gì đang cố gắng.

Có cách nào tốt hơn không? (hoặc) Tôi có thể nói cho thành phần termrector solr bằng cách nào đó sắp xếp nó và nhận chỉ 100 cho tôi? (hoặc) Có một số khung công tác khác mà tôi có thể sử dụng không? Tôi cần phải giữ cho các bình luận mới được lập chỉ mục khi chúng đến, vì vậy đám mây từ khóa luôn luôn tăng trưởng - Khi máy phát điện toán đám mây, nó cần một từ điển các từ có trọng số và làm cho nó trở thành một hình ảnh đẹp.

This câu trả lời không hữu ích.

EDIT - thử jpountz & paige đầu bếp của câu trả lời

Đây là một kết quả mà tôi nhận được cho truy vấn này:

select?q=Id:d4439543-afd4-42fb-978a-b72eab0c07f9&facet=true 
&facet.field=Post_Content&facet.minCount=1&facet.limit=50 

<int name="also">1</int> 
<int name="ani">1</int> 
<int name="anoth">1</int> 
<int name="atleast">1</int> 
<int name="base">1</int> 
<int name="bcd">1</int> 
<int name="becaus">1</int> 
<int name="better">1</int> 
<int name="bigger">1</int> 
<int name="bio">1</int> 
<int name="boot">1</int> 
<int name="bootabl">1</int> 
<int name="bootload">1</int> 
<int name="bootscreen">1</int> 

tôi có 50 yếu tố như vậy, @jpountz nhờ giúp giới hạn các kết quả, NHƯNG tại sao TẤT CẢ TRẢ LƯỢNG của các thành phần riêng lẻ <int> giữ giá trị ? Suy nghĩ của tôi là: Số 1 thể hiện số lượng tài liệu phù hợp với truy vấn của tôi (chỉ có thể là tài liệu do tôi truy vấn theo Id: Guid) và không đại diện cho tần suất của các từ trong Post_Content

Để chứng minh điều này tôi loại bỏ các Id: GUID từ truy vấn và kết quả là:

<int name="content">33</int> 
<int name="can">17</int> 
<int name="on">16</int> 
<int name="so">16</int> 
<int name="some">16</int> 
<int name="all">15</int> 
<int name="i">15</int> 
<int name="do">14</int> 
<int name="have">14</int> 
<int name="my">14</int> 

vấn đề của tôi là làm thế nào để có được tần số hạn trong tài liệu, và không phải là tần số tài liệu của nhiều thuật ngữ. Ví dụ tôi biết một thực tế rằng khả năng khởi động là một từ tôi đã sử dụng 6 lần trong Post_content, Vì vậy, tôi muốn sắp xếp các cặp như (6, "khả năng khởi động"), (5, "đĩa") cho một tập hợp các tài liệu.

+0

Cụ thể là Truy vấn chức năng mà chúng tôi có thể sử dụng cho mục đích này? – Zasz

+0

Các yếu tố xuất hiện trong các kết quả khía cạnh. – Zasz

Trả lời

0

tôi đã đưa ra một giải pháp stopgap: (Im gọi một tài liệu mỗi Solr một "bài" cho các ví dụ rượu sake)

Có một thành phần điều khoản trong Solr, với mục đích có vẻ là để phơi bày tất cả các chỉ mục các điều khoản của bất kỳ trường cụ thể nào. Nó được sử dụng chủ yếu để thực hiện các tính năng như tự động hoàn thành và các tính năng khác hoạt động ở cấp độ cụm từ. Và theo mặc định được sắp xếp theo tần suất - các từ xuất hiện thường xuyên hơn trong trường xuất hiện trước.

Những gì tôi đã làm được tạo ra một trường động được gọi là content_ và lập chỉ mục mỗi bài đăng được đặt trong trường riêng của nó dựa trên danh mục. Điều này có nghĩa là sẽ có hàng trăm trường hợp động của mỗi trường chứa một tập hợp sau và tôi có thể sử dụng thành phần cụm từ trên trường đó để nhận các ĐIỀU KHOẢN HÀNG ĐẦU cho tập hợp sau đó.

Như một bức tranh:

content_postSetOne : contains indexed version of a set of posts 
content_postSetTwo : contains indexed version of another set of posts 
content_postSetThree : contains indexed version of a third set of posts 

Giải pháp này là loại làm việc cho tôi, và bạn có thể dễ dàng tạo ra một lĩnh vực mỗi bài viết cũng nếu cần thiết. Im cũng quan tâm đến việc biết các tác động của việc sử dụng các trường động như thế này: Đây có phải là một vấn đề không?

thế nào điều này là khác nhau từ Paige và jPountz Câu trả lời là:

  1. Tần số hạn là tính từ trong "A" hoặc "Một Set của Documents" và không phải là đếm số tài liệu có chứa thuật ngữ.
  2. Tôi có thể nhận các điều khoản xuất hiện hàng đầu từ trong một tài liệu và nếu cần cũng từ Tập hợp tài liệu.
  3. Tôi không sử dụng faceting vì nó chủ yếu cung cấp tần suất về số lượng tài liệu chứ không phải về số lần từ xảy ra bất kể tài liệu nào.
+0

Nếu có câu trả lời hay hơn, tôi sẽ sẵn sàng đánh dấu chúng là đúng, hủy bỏ mỏ của tôi. – Zasz

1

Nếu tài liệu Lucene là nhận xét, bạn có thể sử dụng faceting để làm như vậy. Ví dụ: yêu cầu sau http://solr:port/solr/select?q={!lucene}uniqueKey:(MA147LL/A OR 3007WFP)&facet=true&facet.field=includes&facet.minCount=1&facet.limit=50 sẽ giúp bạn tạo một đám mây thẻ cho các nhận xét MA147LL/A3007WFP.

Tuy nhiên, phương pháp này sẽ:

  • làm Solr nhanh chóng một ví dụ UnInvertedField cho includes lĩnh vực, trong đó yêu cầu bộ nhớ,
  • đếm số lượng các văn bản đó phù hợp với một thuật ngữ thay vì tổng số lần xuất hiện của thuật ngữ này.
+0

Hey tôi đã thử những gì bạn nói tôi có kết quả lạ, tôi đã chỉnh sửa câu hỏi của mình – Zasz

5

Đây là bài viết mô tả thiết lập Đám mây thẻ - Creating a Tag Cloud with Solr and PHP. Mặc dù phần PHP có thể không áp dụng được cho bạn, thế hệ thực tế của đám mây thẻ mà tôi tin là ...

Bài viết này mô tả phương pháp tạo trường văn bản bằng trình thông báo khoảng trắng để trả về các từ riêng lẻ và sau đó thực hiện tìm kiếm khía cạnh chống lại trường này. Tôi biết rằng bạn có thể đặt giới hạn khía cạnh, vì vậy trong trường hợp của bạn, bạn chỉ có thể nhận được 100 kết quả hàng đầu.

+0

Tôi đã xem xét bài viết và đã thực hiện những gì được nói ở đó - về cơ bản là một khía cạnh trên trường của tôi chứa nội dung, tôi có thể không nhận được điều khoản thường xuyên TOP X, thay vào đó tôi nhận được kết quả mà tôi đã dán trong câu hỏi – Zasz

+0

Dựa trên thông tin mà bạn đã thêm sau khi thử câu trả lời của tôi và câu trả lời từ @jpountz. Bạn sẽ cần phải thực hiện hai truy vấn riêng biệt. 1. Với các tài liệu bạn đang tìm kiếm để hiển thị. (không phải tùy chọn mặt được chỉ định) 2.Một truy vấn chỉ có khía cạnh mà bạn tìm kiếm trên tất cả các tài liệu 'q = *: * & facet = true & facet.field = Post_Content & facet.minCount = 1 & facet.limit = 50' và xây dựng đám mây thẻ của bạn từ các kết quả khía cạnh. –

+0

Im tạo một đám mây chỉ với nội dung từ MỘT tài liệu, MỘT trường! - đối với số điểm 1 = Tôi không cần viết truy vấn như vậy vì tôi biết id của tài liệu mà tôi muốn tạo đám mây. Đối với số điểm 2 Nếu tôi xem xét tất cả các tài liệu, tôi sẽ nhận các điều khoản thường xuyên hàng đầu, trên tất cả các tài liệu, có nghĩa là thuật ngữ TOPMOST có thể ở bất kỳ tài liệu nào khi chúng tôi sử dụng q = *: *! Tôi cần thuật ngữ freq hàng đầu trong tài liệu ONE của tôi, ID mà tôi biết và nội dung của ai sẽ trở thành đám mây. – Zasz

Các vấn đề liên quan